Wormholes (spfa)
一种路是双向的,路的长度是正值;另一种路是单向的,路的长度是负值; 如果有负环输出YES;否则输出NO;不同的路可能有相同的起点和终点:必须用邻接表
While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Each of FJ's farms comprises N (1 ≤ N ≤ 500) fields conveniently numbered 1..N, M (1 ≤ M ≤ 2500) paths, and W (1 ≤ W ≤ 200) wormholes.
As FJ is an avid time-traveling fan, he wants to do the following: start at some field, travel through some paths and wormholes, and return to the starting field a time before his initial departure. Perhaps he will be able to meet himself :) .
To help FJ find out whether this is possible or not, he will supply you with complete maps to F (1 ≤ F ≤ 5) of his farms. No paths will take longer than 10,000 seconds to travel and no wormhole can bring FJ back in time by more than 10,000 seconds.
Input
Line 1 of each farm: Three space-separated integers respectively: N, M, and W
Lines 2..M+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: a bidirectional path between S and E that requires T seconds to traverse. Two fields might be connected by more than one path.
Lines M+2..M+W+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: A one way path from S to E that also moves the traveler back T seconds.
Output
Sample Input
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
Sample Output
NO
YES
Hint
For farm 2, FJ could travel back in time by the cycle 1->2->3->1, arriving back at his starting location 1 second before he leaves. He could start from anywhere on the cycle to accomplish this.
Sponsor
1 #include<iostream>
2 #include<cstdio>
3 #include<cstdlib>
4 #include<cstring>
5 #include<algorithm>
6 #include<cmath>
7 #include<queue>
8 #include<vector>
9 #include<map>
10 #include<string>
11 #define LL long long
12 #define eps 1e-8
13 using namespace std;
14 const int inf = 0x3f3f3f3f;
15 int n,m,w,a,b,c,t,tot,ans;
16 struct node{
17 int l,r,num,nex;
18 }e[10010];
19 int head[550],vis[550],dis[550],sum[550];
20
21 void init()
22 {
23
24 memset(head,-1,sizeof(head));
25 tot=0;
26 ans=0;
27 }
28
29 void add(int l,int r,int num)
30 {
31 e[tot].l=l,e[tot].r=r,e[tot].num=num;
32 e[tot].nex=head[l];
33 head[l]=tot++;
34 }
35
36 int spfa(int x)
37 {
38 queue<int >q;
39 while(!q.empty())
40 q.pop();
41 memset(dis,inf,sizeof(dis));
42 memset(vis,0,sizeof(vis));
43 memset(sum,0,sizeof(sum));
44 q.push(x);
45 vis[x]=1;
46 dis[x]=0;
47 sum[x]=1;
48 while(!q.empty())
49 {
50 int now=q.front(); q.pop();
51 vis[now]=0;
52 for(int i=head[now];i!=-1;i=e[i].nex)
53 {
54 int to=e[i].r;
55 if(dis[to]>dis[now]+e[i].num)
56 {
57 dis[to]=dis[now]+e[i].num;
58 if(!vis[to])
59 {
60 sum[to]++;
61 if(sum[to]>n) return 1;
62 q.push(to);
63 vis[to]=1;
64 }
65 }
66 }
67 }
68 return 0;
69 }
70 int main()
71 {
72 scanf("%d",&t);
73 while(t--)
74 {
75 scanf("%d%d%d",&n,&m,&w);
76 init();
77 while(m--)
78 {
79 scanf("%d%d%d",&a,&b,&c);
80 add(a,b,c);
81 add(b,a,c);
82 }
83 while(w--)
84 {
85 scanf("%d%d%d",&a,&b,&c);
86 add(a,b,-c);
87 }
88 for(int i=1;i<=n;i++)
89 {
90 if(spfa(i)){
91 ans=1;
92 break;//否则超时
93 }
94 }
95 if(ans) printf("YES\n");
96 else printf("NO\n");
97 }
98 }
Wormholes (spfa)的更多相关文章
- ACM: POJ 3259 Wormholes - SPFA负环判定
POJ 3259 Wormholes Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- poj 3259 Wormholes spfa算法
点击打开链接 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25582 Accepted: 9186 ...
- Wormholes(SPFA+Bellman)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36860 Accepted: 13505 Descr ...
- POJ 1151 Wormholes spfa+反向建边+负环判断+链式前向星
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 49962 Accepted: 18421 Descr ...
- POJ3259 :Wormholes(SPFA判负环)
POJ3259 :Wormholes 时间限制:2000MS 内存限制:65536KByte 64位IO格式:%I64d & %I64u 描述 While exploring his many ...
- POJ3259 Wormholes(SPFA判断负环)
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- POJ3259 Wormholes —— spfa求负环
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- uva558 Wormholes SPFA 求是否存在负环
J - Wormholes Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Stat ...
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...
随机推荐
- ssh问题之复盘
一.问题发生.排查以及解决 某天H博士在登录B服务器时发现一个严重的问题,问题是H博士在执行脚本出现一个异常,这个异常是过去我执行脚本只需输入一次密码,现在要输入五六次,只有输入五六次后才能正确执行完 ...
- 【Java基础】Eclipse 和数组
Eclipse 和数组 Eclipse 安装和使用 ... 数组的概述 数组(Array):是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 数组相 ...
- 【Spring】XML方式实现(无参构造 有参构造)和注解方式实现 IoC
文章目录 Spring IoC的实现方式 XML方式实现 通过无参构造方法来创建 1.编写一个User实体类 2.编写我们的spring文件 3.测试类 UserTest.java 4.测试结果 通过 ...
- xtrabackup_binlog_info
文件保存了备份结束时刻binlog的名称和位置
- 【Linux】saltstack的使用详解 超详细
一.salt常用命令 salt 该命令执行salt的执行模块,通常在master端运行,也是我们最常用到的命令 salt [options] '<target>' <function ...
- [mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
转载自:http://www.cnblogs.com/joeblackzqq/p/4526589.html From: http://m.blog.csdn.net/blog/langkeziju/1 ...
- windows10复制粘贴键突然失效无法复制粘贴的最简单办法
报了学习班,打开了VCE的加密文档 今天复制粘贴键突然失效 在网上捣鼓了好多方法都不行最后发现看看你有没有在用加密文件,也就是网课类的文档和视频.有就把它关了关了就好了
- MySQL如何安全的给小表加字段
MySQL学习笔记-如何安全的给小表加字段 如果要给一个大表加字段,你一般都会非常谨慎小心,以免对线上业务造成影响,但实际上给一个小表加字段不慎操作也会导致线上业务出问题,这篇文章主要学习一下MySQ ...
- 一个实体对象不能由多个 IEntityChangeTracker 实例引用
因为需求需要EF 实现批量的删除后插入,所以出现了这个报错, 这个报错的原因是,EF查询是有带跟踪的,跟踪后其他上下文想操作这个实体就会报错. 所以,查询使用 ef AsNoTracking 查后无追 ...
- JavaScript基础知识-基本概念
typeof操作符 typeof 操作符返回一个字符串,表示未经计算的操作数的类型. // 数值 typeof 37 === 'number'; typeof 3.14 === 'number'; t ...