hdu2254 奥运

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2254

题意:题目让我们求得是的可以得到的金牌数量,而和金牌数量=在t1到t2天(包括t1,t2)内从v1到v2共有多少种走法,每天走一步。这个题的坑在于如果v1或者v2城市不存在,还有t1>t2这两种情况都是不可能的,所以直接输出答案为0。

对于题目给我们数据,我们首先需要离散化建图。这里说一下,邻接矩阵我认为可以把它叫做一步可达矩阵,也就是说我们建立一个邻接矩阵,可以直接用M[a][b]看出走一步就可以完成a到b的路线有多少条路线。然后如果将这个矩阵自乘一次就可以得到两步到达可以完成从a到b的路线有多少条路,再乘一次就是可以得到三步可以从a到b的路线有多少条,以此类推,所以对于这道题,我们只需要把走一天和走一万天的矩阵都算出来。然后对于每次查询,我们线性相加就好了。具体看代码……这道题算是学到一个矩阵的姿势了。

//Author: xiaowuga
#include<iostream>
#include<map>
#include<cstring>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define size 31
#define mod 2008
using namespace std;
typedef long long ll;
map<int,int>li;
int ct=;
struct Mat{
int mat[size][size];
void clear(){
memset(mat,,sizeof(mat));
} Mat operator *(const Mat &m) const{
Mat tmp;
tmp.clear();
for(int k=;k<ct;k++)
for(int i=;i<ct;i++){
if(mat[i][k]==) continue;
for(int j=;j<ct;j++){
if(m.mat[k][j]==) continue;
tmp.mat[i][j]+=mat[i][k]*m.mat[k][j]%mod;
tmp.mat[i][j]%=mod;
}
}
return tmp;
}
}M[];
int main(){
ios::sync_with_stdio(false);cin.tie();
int n;
while(cin>>n){
li.clear();
ct=;
int a,b;
Mat m;
m.clear();
for(int i=;i<n;i++){
cin>>a>>b;
if(li.count(a)==) li[a]=ct++;a=li[a];
if(li.count(b)==) li[b]=ct++;b=li[b];
m.mat[a][b]++;
}
M[]=m;
for(int i=;i<;i++) M[i]=M[i-]*m;
int T,v1,v2,t1,t2;
cin>>T;
while(T--){
cin>>v1>>v2>>t1>>t2;
if(t1>t2||t2==){
cout<<<<endl;continue;
}
int x=-,y=-;
if(li.count(v1)!=) x=li[v1];
if(li.count(v2)!=) y=li[v2];
if(x==-||y==-){
cout<<<<endl;continue;
}
ll sum=;
for(int i=t1;i<=t2;i++){
if(i==) continue;
sum+=M[i].mat[x][y]%mod;
sum%=mod;
}
cout<<sum<<endl;
}
}
return ;
}

最新文章

  1. 前端学HTTP之重定向和负载均衡
  2. java学习笔记一
  3. BZOJ 2761: [JLOI2011]不重复数字 水题
  4. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)
  5. IOS的变量前加extern和static字段
  6. ios学习笔记block回调的应用(一个简单的例子)
  7. Web安全--使用Salt + Hash将密码加密后再存储进数据库
  8. Aizu 2305 Beautiful Currency DP
  9. 使用SndPlaySound从内存中播放WAV
  10. Oracle JDBC存入图片Blob
  11. [翻译] C# 8.0 预览
  12. mysql中的union用法以及子查询综合应用
  13. [django] 利用多线程增加异步任务
  14. snpeff注释变异(variants)
  15. Sudoku POJ - 3076 (dfs+剪枝)
  16. Jmeter(二十三)Jmeter-Question之“批量造数据”
  17. Guava Finalizer
  18. DUBBO本地搭建及小案例 (转)
  19. asp.net中WinForm使用单例模式示例
  20. ajaxupload.js调用始终进入error回调

热门文章

  1. UltraISO制作启动盘及提取U盘为ISO镜像
  2. private继承的作用
  3. iframe中子父窗口互调的js方法
  4. ResourceBundle读取utf-8格式properties 中文乱码
  5. tftp server setup
  6. 示例 - 10行代码在C#中获取页面元素布局信息
  7. 虚拟化–操作系统级 LXC Linux Containers内核轻量级虚拟化技术
  8. 【转】伪O2O已死?2016年实体零售将迎来真正的O2O
  9. CLion 2017 注册码
  10. 【转】【Linux】sed命令详解