hdu 2254(矩阵)
题意:指定v1,v2,要求计算出在t1,t2天内从v1->v2的走法
思路:可以知道由矩阵求,即将其建图A,求矩阵A^t1 + ...... + A^t2. A^n后,/*A.xmap[v1][v2]即是从v1到v2要n步
所以先预处理出A^1 -A^10000的情况,后面再注意下细节,计算即可.
(每条道路走需要花一天的时间,且不能在某个城市停留,且t1=0时的走法数为0)
开始以为只要t1 = 0就输出0,结果不停WA,一直对照别人的代码- -
结果偶然发现这个特例,它喵的我也是醉了,才发现是题意理解错了,好惨...Orz
- 特例:
- Input:
- 1
- 1 1
- 1
- 1 1 0 1
- Ouput:
- 1
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
typedef long long ll;
const int mod=2008;
const int maxn=5e5;
map<int,int>has;
struct Maxtri
{
int xmap[30][30];
};
int siz;
Maxtri mat[10005]; Maxtri Mul(Maxtri &a,Maxtri &b)
{
Maxtri c;
for(int i=0; i<siz; i++)
{
for(int j=0; j<siz; j++)
{
c.xmap[i][j]=0;
for(int k=0; k<siz; k++)
{
c.xmap[i][j]+=a.xmap[i][k]*b.xmap[k][j];
c.xmap[i][j]%=mod;
}
}
}
return c;
} int main()
{
int n,u,v,k; int v1,v2,t1,t2;
while(scanf("%d",&n) != EOF)
{
siz = 0;
memset(mat[0].xmap,0,sizeof(mat[0].xmap));
has.clear();
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&u,&v);
if(has.find(u)==has.end())
{
has[u]=siz++;
}
if(has.find(v)==has.end())
{
has[v]=siz++;
}
mat[0].xmap[has[u]][has[v]] ++;
} for(int i=1; i<10001; i++)
mat[i]=Mul(mat[i-1],mat[0]);
scanf("%d",&k);
while(k--)
{
scanf("%d%d%d%d",&v1,&v2,&t1,&t2);
if(has.find(v1)==has.end()||has.find(v2)==has.end() || (!t1 && !t2))
{
printf("0\n");
continue;
}
if(t1 > t2)
swap(t1,t2); int ans=0;
for(int i=t1-1; i<t2; i++)
{
if(i == -1)
continue;
ans= (ans + mat[i].xmap[has[v1]][has[v2]])%mod;
}
printf("%d\n",ans%mod);
}
}
return 0;
}
hdu 2254(矩阵)的更多相关文章
- HDU 2254 奥运(矩阵高速幂+二分等比序列求和)
HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意: 中问题不解释. 分析: 依据floyd的算法,矩阵的k次方表示这个矩阵走了k步. 所以k ...
- HDU 2254
http://acm.hdu.edu.cn/showproblem.php?pid=2254 矩阵乘法两个经典问题的综合题,还要离散化和处理边界,好题啊好题 题意容易理解错,每一天是独立的,所以根据加 ...
- hdu 2254 奥运
点击打开hdu 2254 思路: 矩阵乘法 分析: 1 题目给定一个有向图,要求t1-t2天内v1-v2的路径的个数 2 根据离散数学里面的可达矩阵的性质,我们知道一个有向图的邻接矩阵的前n次幂的和即 ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
- HDU 2254 奥运(矩阵+二分等比求和)
奥运 [题目链接]奥运 [题目类型]矩阵+二分等比求和 &题解: 首先离散化城市,之后就是矩阵快速幂了,但让求的是A^(t1)+A^(t1+1)+...+A^(t2),我先想的是打表,但时间真 ...
- 【矩阵快速幂】之奥运 hdu 2254
1.城市的编号不是从0到n-1,而是随便的一个数字,需要离散化否则不能存相关信息 2.城市数不超过30,也就是说我的方法开矩阵不超过60,但是我残念的一开始以为最多可能有20000个不同城市 血 ...
- HDU 2254 奥运(数论+矩阵)
题目中文的不解释啊. .. 须要注意的就是:离散数学中,有向图的邻接矩阵A表示全部点之间路径长度为1的路径数量,A^n则表示路径长度为n的路径数量.故须要求某两点在(A^t1)~(A^t2)的路径数量 ...
- HDU 2855 (矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
随机推荐
- appcompat v21: 让 Android 5.0 前的设备支持 Material Design
1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...
- Mysql数据库的触发程序
/** **创建表 */ CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT N ...
- Linux基础常用命令
Linux 下命令有很多,并且很多命令用法又有不同的选项,这里介绍一些常用的最基本的Linux命令的用法,希望给大家留下便利之处. 1.cd 切换目录.例如 cd /home 可切换到home目录, ...
- 【转】Python处理wave文件
#本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活 ...
- ASP.NET 访问项目网站以外的目录文件
简单的说,可以通过在 IIS 添加虚拟目录的方法做到,获取访问路径的时候就用 HttpContext.Current.Server.MapPath("~/xxx"); 的方式. 下 ...
- Centos7.x:开机启动服务的配置和管理
一.开机启动服务的配置 1.创建服务配置(权限754) vim /usr/lib/systemd/system/nginx.service 文件内容解释 [Unit]:服务的说明Description ...
- Spring知识点回顾(03)Bean的 Scope
sigleton prototype request session globalsession stepscope
- bootstrap表格 之多选数据的获取
使用表格的时候经常会用到多选的功能,比较常用,下面写一个小Dome记录一下 如下:单击批量删除按钮之后,需要获取选中行数据,传值到后台进行处理 一.获取选择行的数据 btnplDel是按钮id:tab ...
- Django ORM那些相关操作
一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/ 官网文档 常用的操作 <1> all() ...
- java集合小知识的复习
*Map接口 Map<k,v>接口中接收两个泛型,key和value的两个数据类型 Map中的集合中的元素都是成对存在的每个元素由键与值两部分组成,通过键可以找对所对应的值.值可以重复,键 ...