HDU 2254 奧運(數論+矩陣)
題目中文的不解釋啊。。。
需要注意的就是:離散數學中,有向圖的鄰接矩陣A表示所有點之間路徑長度為1的路徑數量,A^n則表示路徑長度為n的路徑數量,故需要求某兩點在(A^t1)~(A^t2)的路徑數量之和。
奧運
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2251 Accepted Submission(s): 572
Problem Description
北京迎來了第一個奧運會,我們的歡呼聲響徹中國大地,所以今年的奧運金牌 day day up!
比爾蓋茲坐上鳥巢裡,手裡搖著小紙扇,看的不亦樂乎,被俺們健兒的頑強拼搏的精神深深的感動了。反正我的錢也多的沒地方放了,他對自己說,我自己也來舉辦一個奧運會,看誰的更火。不過他的奧運會很特別:
1 參加人員必須是中國人;
2 至少會加法運算(因為要計算本人獲得的金牌數)
他知道中國有很多的名勝古蹟,他知道自己在t1 到 t2天內不可能把所有的地方都玩遍,所以他決定指定兩個地方v1,v2,如果參賽員能計算出在t1到t2天(包括t1,t2)內從v1到v2共有多少種走法(每條道路走需要花一天的時間,且不能在某個城市停留,且t1=0時的走法數為0),那麼他就會獲得相應數量的金牌,城市的總數<=30,兩個城市間可以有多條道路
,每條都視為是不同的。
比爾蓋茲坐上鳥巢裡,手裡搖著小紙扇,看的不亦樂乎,被俺們健兒的頑強拼搏的精神深深的感動了。反正我的錢也多的沒地方放了,他對自己說,我自己也來舉辦一個奧運會,看誰的更火。不過他的奧運會很特別:
1 參加人員必須是中國人;
2 至少會加法運算(因為要計算本人獲得的金牌數)
他知道中國有很多的名勝古蹟,他知道自己在t1 到 t2天內不可能把所有的地方都玩遍,所以他決定指定兩個地方v1,v2,如果參賽員能計算出在t1到t2天(包括t1,t2)內從v1到v2共有多少種走法(每條道路走需要花一天的時間,且不能在某個城市停留,且t1=0時的走法數為0),那麼他就會獲得相應數量的金牌,城市的總數<=30,兩個城市間可以有多條道路
,每條都視為是不同的。
Input
本題多個case,每個case:
輸入一個數字n表示有n條道路 0<n<10000
接下來n行每行讀入兩個數字 p1,p2 表示城市p1到p2有道路,並不表示p2到p1有道路 (0<=p1,p2<2^32)
輸入一個數字k表示有k個參賽人員
接下來k行,每行讀入四個資料v1,v2,t1,t2 (0<=t1,t2<10000)
輸入一個數字n表示有n條道路 0<n<10000
接下來n行每行讀入兩個數字 p1,p2 表示城市p1到p2有道路,並不表示p2到p1有道路 (0<=p1,p2<2^32)
輸入一個數字k表示有k個參賽人員
接下來k行,每行讀入四個資料v1,v2,t1,t2 (0<=t1,t2<10000)
Output
對於每組資料中的每個參賽人員輸出一個整數表示他獲得的金牌數(mod 2008)
Sample Input
6
1 2
1 3
2 3
3 2
3 1
2 1
3
1 2 0 0
1 2 1 100
4 8 3 50
Sample Output
0
1506
0
</pre><pre style="font-family: 'Courier New'; background-color: rgb(244, 251, 255);"><pre name="code" class="cpp">#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-10
///#define M 1000100
#define LL __int64
///#define LL long long
///#define INF 0x7ffffff
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
#define zero(x) ((fabs(x)<eps)?0:x)
#define mod 2008
const int maxn = 210;
using namespace std;
struct matrix
{
int f[31][31];
};
matrix p[10001];
map<int, int>mp;
matrix mul(matrix a, matrix b, int n)
{
matrix c;
memset(c.f, 0, sizeof(c.f));
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
for(int k = 0; k < n; k++) c.f[i][j] += a.f[i][k]*b.f[k][j];
c.f[i][j] %= mod;
}
}
return c;
}
matrix pow_mod(matrix a, int b, int n)
{
matrix s;
memset(s.f, 0 , sizeof(s.f));
for(int i = 0; i < n; i++) s.f[i][i] = 1;
while(b)
{
if(b&1) s = mul(s, a, n);
a = mul(a, a, n);
b >>= 1;
}
return s;
}
matrix Add(matrix a,matrix b, int n)
{
matrix c;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
c.f[i][j] = a.f[i][j]+b.f[i][j];
c.f[i][j] %= mod;
}
}
return c;
}
int main()
{
int n, m;
while(scanf("%d",&n)!=EOF)
{
int u, v;
int ans = 0;
mp.clear();
memset(p[0].f, 0, sizeof(p[0].f));
for(int i = 0; i < n; i++)
{
scanf("%d %d",&u, &v);
if(mp.find(u) == mp.end()) mp[u] = ans++;
if(mp.find(v) == mp.end()) mp[v] = ans++;
p[0].f[mp[u]][mp[v]] ++;
}
for(int i = 1; i < 10001; i++) p[i] = mul(p[i-1], p[0], ans);
scanf("%d",&m);
int t1, t2, v1, v2;
while(m--)
{
scanf("%d %d %d %d",&v1, &v2, &t1, &t2);
if(t1 > t2) swap(t1,t2);
if(mp.find(v1) == mp.end() || mp.find(v2) == mp.end() || t1 == 0 && t2 == 0)
{
puts("0");
continue;
}
int sum = 0;
for(int i = t1-1; i < t2; i++)
{
if(i == -1) continue;
sum += p[i].f[mp[v1]][mp[v2]]%mod;
}
printf("%d\n",sum%mod);
///cout<<(sum%mod)<<endl;
}
}
return 0;
}
相關文章
- HDU 3059 Fibonacci數列與矩陣求和 矩陣大小不固定矩陣
- hdu 1757 矩陣連乘矩陣
- HDU4565 So Easy! (矩陣)矩陣
- hdu 3117矩陣+斐波那契數列矩陣
- HDU 1005 Number Sequence(矩陣)矩陣
- HDU 1575 Tr A(矩陣快速冪)矩陣
- HDU 4565 So Easy!(矩陣快速冪)矩陣
- HDU 4686 (推公式+矩陣快速冪)公式矩陣
- HDU 4920 Matrix multiplication(矩陣相乘)矩陣
- HDU 4686 Arc of Dream(矩陣加速遞推)矩陣
- HDU 4965 Fast Matrix Calculation(矩陣快速冪)AST矩陣
- 矩陣論 戴華 高清矩陣
- HDU 2157 How many ways?? (矩陣快速冪)矩陣
- HDU 1005 Number Sequence(矩陣快速冪)矩陣
- HDU 2256Problem of Precision(矩陣快速冪)矩陣
- HDU 1575 Tr A【矩陣快速冪取模】矩陣
- HDU 1005 Number Sequence:矩陣快速冪矩陣
- HDU 4565 So Easy!(公式化簡+矩陣)公式矩陣
- HDU5411CRB and Puzzle(矩陣快速冪)矩陣
- HDU1588Gauss Fibonacci(矩陣)矩陣
- HDU 1588 斐波那契數列數列變形和矩陣連乘矩陣
- HDU 4549 M斐波那契數列(矩陣快速冪+費馬小定理)矩陣
- 3.5、矩陣變數矩陣變數
- Bell(hdu4767+矩陣+中國剩餘定理+bell數+Stirling數+歐幾里德)矩陣
- HDU 2276 - Kiki & Little Kiki 2 (矩陣快速冪)矩陣
- HDU 4291 A Short problem(矩陣快速冪+迴圈節)矩陣
- HDU 4549M斐波那契數列(矩陣快速冪+費馬小定理)矩陣
- hdu2243 ac自動機+矩陣連乘矩陣
- HDU 5318 The Goddess Of The Moon(遞推+矩陣優化)Go矩陣優化
- 高等代數1 矩陣矩陣
- 線性代數--矩陣矩陣
- hdu 1792 A New Change Problem(數論)
- bzoj4547: Hdu5171 小奇的集合(矩陣乘法)矩陣
- 生成螺旋矩陣(方陣、矩陣)矩陣
- 鄰接矩陣、度矩陣矩陣
- 巨大的矩陣(矩陣加速)矩陣
- HDU3221Brute-force Algorithm(矩陣快速冪&&指數降冪)Go矩陣
- HDU3519Lucky Coins Sequence(DP+矩陣加速)矩陣