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 ...
随机推荐
- 笔记-django学习链接
form表单学习 https://www.cnblogs.com/weiman3389/p/6225075.html python字符串replace()方法 https://www.cnblogs. ...
- 内置模块(time、random、hashlib、os)
简介: 模块:本质上就是一个.py文件,使用其中的函数. 模块分为:内置函数.第三方模块.自定义模块. 今天学习的就是Python的内置函数. 回到顶部 一.time模块 1.时间的表示形式 在Pyt ...
- rtsp over udp
#include <stdio.h> #include <netinet/in.h> #include <sys/socket.h> #include <st ...
- 用python的turtle画分形树
由于分形树具有对称性,自相似性,所以我们可以用递归来完成绘制.只要确定开始树枝长.每层树枝的减短长度和树枝分叉的角度,我们就可以把分形树画出来啦!! 代码如下: # -*- coding: utf-8 ...
- java反射基础知识(四)反射应用实践
反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的 ...
- Linux用户、群组及权限
由于对文件的操作需要切换到相应文件夹下进行,所以对文件内容的修改,最基本的是需要其文件夹执行的权限. 文件夹的读权限(read)可以独立行使,但是对文件夹内容的写权限(对其内文件的新建.删除.重命名) ...
- 微信小程序组件scroll-view
视图容器scroll-view :官方文档 Demo Code var order = ['red', 'yellow', 'blue', 'green', 'red'] Page({ data: { ...
- ORACLE 多表连接与子查询
Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.co ...
- Zabbix Linux http 监控脚本
说明:自定义监控脚本,监控内存是否启用主进程 创建文件:vim check_http.sh #!/bin/bash result=`ps -ef | grep httpd | grep -v grep ...
- QString类
1.将QString所有字母大写 QString.toUpper() 2.将QString所有字母小写 QString.toLower() 3.获取字符串的字符数 QString.length() 4 ...