PKU 3259-Wormholes
来源:互联网 发布:淘宝优惠券秒杀代码 编辑:程序博客网 时间:2024/05/29 17:43
用到的算法:Bellman_ford
题目链接:http://poj.org/problem?id=3259
题意:
John的农场里N块地,M条路连接两块地(双向),w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。
思路:
由于存在负权边,Dijkstra便不能用了,用Bellman_ford。
题目简化一下,就是看所给的图中有没有负权回路,如果有的话,输出"YES",否则,输出"NO"。
#include<cstdio>#include<cstring>#define Max 3000struct node{int sta,end,time;void set(int x,int y,int s){sta=x,end=y,time=s;}}edge[2*Max];int dis[Max];bool bellman_ford(int v,int edge_num){memset(dis,0x7f,sizeof(dis));//每个节点到原点的距离都初始化为无穷远dis[1]=0;int i,j;for(i=0;i<v;i++){bool flag=false;for(j=0;j<edge_num;j++){int tx=edge[j].sta,ty=edge[j].end;if(dis[ty]>dis[tx]+edge[j].time)//松弛dis[ty]=dis[tx]+edge[j].time,flag=true;}if(!flag)break;}if(i==v)//如果存在负权回路return true;return false;}int main(){int cas;scanf("%d",&cas);while(cas--){int n,m,w,edge_num=0;scanf("%d %d %d",&n,&m,&w);int x,y,t;while(m--){scanf("%d %d %d",&x,&y,&t);//路是双向的edge[edge_num++].set(x,y,t);edge[edge_num++].set(y,x,t);}while(w--){scanf("%d %d %d",&x,&y,&t);edge[edge_num++].set(x,y,-t);//虫洞的方向的单向的,且时间为负}puts(bellman_ford(n,edge_num)?"YES":"NO");}return 0;}
- PKU 3259 Wormholes
- PKU 3259-Wormholes
- pku 3259 Wormholes(bellman-ford)
- pku 3259 Wormholes(SPFA判负环)
- pku 3259 Wormholes (Bellman ford判断负权边)
- PKU 3259 Wormholes 最短路 bellman
- PKU 3259 Wormholes - 判断负权回路 Bellman-Ford
- PKU-#3259 Wormholes(Bellman-Ford+vector+FIFO)
- 3259--Wormholes
- 3259 Wormholes 解题报告
- 3259 Wormholes 之 SPFA
- poj 3259 Wormholes //SPFA
- POJ 3259 Wormholes
- poj 3259 Wormholes
- POJ 3259 Wormholes
- POJ 3259 Wormholes
- Poj 3259 Wormholes
- poj 3259 Wormholes
- Oracle sql语句中不支持boolean类型(decode&case)
- JMS规范介绍(1) JMS消息
- hdu 1013 Digital Roots (找规律)
- C语言经典100例 - 005
- LDA算法
- PKU 3259-Wormholes
- uva-10305 - Ordering Tasks
- 关于python文件操作
- UVa 757 - Gone Fishing
- 每天早起后不能立刻做的事情
- hdu1266 Reverse Number (模拟)
- DOS实用命令
- UVa 10827 - Maximum sum on a torus
- hdu 1720 A+B Coming (进制转换)