题目中文的不解释啊。

。。

须要注意的就是:离散数学中,有向图的邻接矩阵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,两个城市间能够有多条道路

,每条都视为是不同的。

 
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)
 
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 2254 奥运(数论+矩阵)的更多相关文章

  1. HDU 2254 奥运(矩阵高速幂+二分等比序列求和)

    HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意:  中问题不解释. 分析:  依据floyd的算法,矩阵的k次方表示这个矩阵走了k步.  所以k ...

  2. hdu 2254 奥运

    点击打开hdu 2254 思路: 矩阵乘法 分析: 1 题目给定一个有向图,要求t1-t2天内v1-v2的路径的个数 2 根据离散数学里面的可达矩阵的性质,我们知道一个有向图的邻接矩阵的前n次幂的和即 ...

  3. HDU 2254 奥运(矩阵+二分等比求和)

    奥运 [题目链接]奥运 [题目类型]矩阵+二分等比求和 &题解: 首先离散化城市,之后就是矩阵快速幂了,但让求的是A^(t1)+A^(t1+1)+...+A^(t2),我先想的是打表,但时间真 ...

  4. HDU - 2254 奥运 (求等比数列和)

    Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up! 比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强拼搏的精神深深的 ...

  5. hdu 2254 奥运(邻接矩阵应用)

    Problem Description 北京迎来了第一个奥运会,我们的欢呼声响彻中国大地,所以今年的奥运金牌 day day up! 比尔盖兹坐上鸟巢里,手里摇着小纸扇,看的不亦乐乎,被俺们健儿的顽强 ...

  6. hdu 2865 Polya计数+(矩阵 or 找规律 求C)

    Birthday Toy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. HDU.1575 Tr A ( 矩阵快速幂)

    HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ...

  8. hdu 3117 Fibonacci Numbers 矩阵快速幂+公式

    斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...

  9. 【矩阵快速幂】之奥运 hdu 2254

    1.城市的编号不是从0到n-1,而是随便的一个数字,需要离散化否则不能存相关信息 2.城市数不超过30,也就是说我的方法开矩阵不超过60,但是我残念的一开始以为最多可能有20000个不同城市    血 ...

随机推荐

  1. Python urllib和urllib2模块学习(二)

    一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...

  2. python 网络编程第三版

    为服务端增加多线程解决方案 1.服务端代码如下: ***这个版本并没有真正的起到多线程的作用,主要原因在于t.join():以后的版本会改进这个问题*** #!/usr/bin/python #!co ...

  3. NetworkManager——Linux强大的网络管理工具

    NetworkManager服务:NetworkManager - Linux Networking made Easy NetworkManager简介:NetworkManager由一个管理系统网 ...

  4. Oracle EBS-SQL (WIP-13):检查任务组件未选MRP净值.sql

    select WE.WIP_ENTITY_NAME                                              任务号,         MFG_LOOKUPS_WJS. ...

  5. Mac OS X:Dock 的附加功能

    Dock 提供了可能并非显而易见的有用控件和菜单.通过修饰键的不同组合(如 Option 键.Control 键)及鼠标点按的不同类型(点按与按下及按住),即可使用下列附加功能.本文适用于 Mac O ...

  6. 对TCP说三道四(三次握手)

    夜朦胧,人方静,无聊的人打开了无聊的电脑看到了一张无聊的图,想着想着就睡着了,梦到了人a和人b的一次聊天. 有一天,a有事情想跟b商量就问b“有时间么,想和你聊一下天”,b想了一会发现自己能抽出时间就 ...

  7. c++ - How to use wstring and wcout to output Chinese words in Xcode? - Stack Overflow

    c++ - How to use wstring and wcout to output Chinese words in Xcode? - Stack Overflow How to use wst ...

  8. 如何交换a和b两个整数的值,不用额外空间

    这个题貌似完全颠覆一般的Logic:交换两个整数需要一个额外的空间用于保存: t = b; b = a; a  = t; 粗看上去似乎没有办法,但是仔细想一下,既然不能用额外的空间,那么能用的方法就只 ...

  9. ASP.NET仿新浪微博下拉加载更多数据瀑布流效果

    闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前, ...

  10. sqlplus查看服务名

    查看服务名: show parameter service 查看实例名: select * from v$instance; 查看数据库名: select name from v$database; ...