51nod 1326 奇妙的spfa+dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1326
多组测试数据,输入的第一行含一个整数caseT,表示测试数据个数,1<=caseT<=3.
之后有caseT组相同结构的测试数据,每组测试数据构成如下:
第一行三个整数,N,M,T,且2<=N<=50,1<=M<=50,1<=T<=1,000,000,000,000,000,000(即
10^18).
之后M行,每行三个整数Ai,Bi,Di,表示城市Ai与Bi间有一条双向道路,且小鹿穿越这条路要花费Di的时间。其中,0<=Ai,Bi<N,1<=Di<=10000。
每组测试数据一行输出,如果存在题目所述路径输出“Possible”,否则“Impossible”,不含引号。
1
3 3 25
0 2 7
0 1 6
1 2 5
Possible
基本思想:能否在T时刻刚好到达n号点,可选n点的任一入边(q-->n),记录边长ds,看能否在S时刻到达q,且 (T-S)%(2*ds)==0(S<=T)。
然后可以设dp[x][y] 表示到达x点,并且使dp[i][j]%(2*ds)==j 成立的最小时刻。初始化dp[1][0]=0;然后跑SPFA;DP方程dp[k][ (j+dis[i][k])%(2*ds) ] = min { dp[i][j] + dis[i][k] }。
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
struct Edge{int to,w,next;}e[];
int cnt,first[];
long long d[][];
void add(int u,int v,int w)
{
e[cnt].w=w;
e[cnt].to=v;
e[cnt].next=first[u];
first[u]=cnt++;
}
struct node{int u,w;}; bool vis[][];
long long spfa(int N,int mod,long long T)
{
memset(vis,,sizeof(vis));
memset(d,inf,sizeof(d));
queue<node>Q;
Q.push(node{,});
vis[][]=;
d[][]=;
while(!Q.empty()){
node t1=Q.front(); Q.pop();
vis[t1.u][t1.w]=;
for(int i=first[t1.u];i+;i=e[i].next){
Edge x=e[i];
if(d[x.to][(t1.w+x.w)%mod]>d[t1.u][t1.w]+x.w){
d[x.to][(t1.w+x.w)%mod]=d[t1.u][t1.w]+x.w;
if(!vis[x.to][(t1.w+x.w)%mod]){
Q.push(node{x.to,(t1.w+x.w)%mod});
vis[x.to][(t1.w+x.w)%mod]=;
}
}
}
}
return d[N][T%mod];
}
int main()
{
int C,N,M,i,j,k;
long long T;
while(cin>>C){
while(C--){
int a,b,c;
cin>>N>>M>>T;
cnt=;
memset(first,-,sizeof(first));
while(M--){
cin>>a>>b>>c;
a++;b++;
add(a,b,c);
add(b,a,c);
}
bool ok=;
for(i=;i<cnt;i+=)
{
if(e[i].to==N||e[i+].to==N)
{
int w=*e[i].w;
if(spfa(N,w,T)<=T){ok=;break;}
}
}
ok?puts("Possible"):puts("Impossible");
}
}
//system("pause");
return ;
}
51nod 1326 奇妙的spfa+dp的更多相关文章
- 【BZOJ1003】1003: [ZJOI2006]物流运输trans SPFA+DP
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- HDU 3499 Flight spfa+dp
Flight Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65535/65535K (Java/Other) Total Subm ...
- BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP
题意:链接 方法:SPFA+DP 解析:挺好的题目.因为数据范围较小所以用这样的方式能够搞,只是也是挺不好想的. 我们定义cost(i,j)表示从第i天走到第j天运用同一种方式的最小花费,然后因为数据 ...
- BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...
- BZOJ 1003 物流运输 题解 【SPFA+DP】
BZOJ 1003 物流运输 题解 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的 ...
- HDU 4433 locker(SPFA+DP)
题目链接 去年区域赛的题目,早就看过题目了,又是过了好久了... 这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂... dp[i][j ...
- BZOJ-1003 物流运输trans SPFA+DP
傻逼错误耗我1h,没给全范围坑我1A.... 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MB Submit: 529 ...
- 51nod 1043 幸运号码(数位dp)
题目链接:51nod 1043 幸运号码 题解:dp[i][j]表示 i 个数和为 j 的总数(包含0开头情况) dp[i][j] = dp[i-1][j-k] i & 1 :这里用滚动数组节 ...
- 51nod 1092 回文字符串 (dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这个题是poj-3280的简化版,这里只可以增加字符,设 dp[i ...
随机推荐
- 《Vim实用技巧》阅读笔记 --- 移动及跳转
1.在对实际行的操作之前加上g,即可对屏幕行进行操作,例如:`gj`表示向下移动一个屏幕行,`g^`表示移动到屏幕行的第一个非空白字符等等 2.Vim有两组面向单词正向及反向移动的命令: w 正向移动 ...
- python常见模块之collections模块
一.模块简介 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtu ...
- 我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题
今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的And ...
- Python高级教程-高阶函数
Higher-order function(高阶函数) 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 但 ...
- Tflearn的安装
scipy-doc安装 sudo apt-get install python-scipy-doc安装python-scipy-doc h5py安装 sudo pip install h5py sci ...
- 【人员招聘】岗位职责和技能要求——By Me
- 005-TCP传输控制协议
一.概述 传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的 ...
- linq中将int类型转换为string类型,toString()报错
今天同事在调试程序的时候,报了一个不寻常的错误, “LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式 ...
- 微信小程序学习笔记(5)--------框架之视图层
这一系列转载:http://blog.csdn.net/zsp45212/article/details/53518238 视图层 框架的视图层由wxml与wxss编写,由组件进行展示.将逻辑层的数据 ...
- 一篇文章吃透iOS、JS的时间日期(Date, Calendar, Locale, TimeZone)
iOS 时间相关类 NSDate - 表示一个绝对的时间点. NSCalendar - 代表一个特定的日历,例如公历或者希伯来日历.它提供了一系列基于日期的计算,并且可以让你在"NSDate ...