POJ 2359 Wormholes
2016-07-13 10:01
239 查看
bellman_ford 算法检查是否有负环。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int inf = 0x3f3f3f3f;
int d[510],n,m,w;
struct Edge {
int v,e,value;
} edge[10000];
bool bellman_ford(int mm) {
memset(d,inf,sizeof(d));
d[1] = 0;
for(int i = 1;i <= n;i++) {//检查n次后如果还存在d[e] > d[v]+t,则存在负环,符合题意
bool flag = true;
for(int j = 0;j < mm;j++) {
int v = edge[j].v;
int e = edge[j].e;
int t = edge[j].value;
if(d[e] > d[v] + t) {
flag = false;
d[e] = d[v] + t;
}
}
if(flag) return false;
}
return true;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d%d%d",&n,&m,&w);
int v,e,t,tt = 0;
for(int i = 1;i <= m;i++) {
scanf("%d%d%d",&v,&e,&t);//这样不用查重因为循环n次后还是会选择最短的路径,比起二维数组节约空间
edge[tt].v = v;
edge[tt].e = e;
edge[tt++].value = t;
edge[tt].v = e;
edge[tt].e = v;
edge[tt++].value = t;
}
for(int i = 1;i <= w;i++) {
scanf("%d%d%d",&v,&e,&t);
edge[tt].v = v;
edge[tt].e = e;
edge[tt++].value = -t;
}
bool ans = bellman_ford(tt);
if(ans)
printf("YES\n");
else
printf("NO\n");
}
}
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int inf = 0x3f3f3f3f;
int d[510],n,m,w;
struct Edge {
int v,e,value;
} edge[10000];
bool bellman_ford(int mm) {
memset(d,inf,sizeof(d));
d[1] = 0;
for(int i = 1;i <= n;i++) {//检查n次后如果还存在d[e] > d[v]+t,则存在负环,符合题意
bool flag = true;
for(int j = 0;j < mm;j++) {
int v = edge[j].v;
int e = edge[j].e;
int t = edge[j].value;
if(d[e] > d[v] + t) {
flag = false;
d[e] = d[v] + t;
}
}
if(flag) return false;
}
return true;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d%d%d",&n,&m,&w);
int v,e,t,tt = 0;
for(int i = 1;i <= m;i++) {
scanf("%d%d%d",&v,&e,&t);//这样不用查重因为循环n次后还是会选择最短的路径,比起二维数组节约空间
edge[tt].v = v;
edge[tt].e = e;
edge[tt++].value = t;
edge[tt].v = e;
edge[tt].e = v;
edge[tt++].value = t;
}
for(int i = 1;i <= w;i++) {
scanf("%d%d%d",&v,&e,&t);
edge[tt].v = v;
edge[tt].e = e;
edge[tt++].value = -t;
}
bool ans = bellman_ford(tt);
if(ans)
printf("YES\n");
else
printf("NO\n");
}
}
相关文章推荐
- JNI学习积累之一 ---- 常用函数大全
- 微软和 SUSE Linux 宣布在公有云方面达成新的合作
- 李洪强iOS开发之keychain的使用
- 在leangoo里怎么复制列表,删除列表,插入列表?
- uCOS-II任务机制
- Twig关于时间
- 文章标题
- 关于Python中的for循环控制语句
- poj3683 Priest John's Busiest Day【2-sat n+m算法】
- 应用多机房部署
- css之z-index
- canvas 伞形的绘制
- shell学习-1
- DriverStudio开发PCI设备DMA数据传输
- uC/cos-II系统函数管理
- [Hihocoder]1335 : Email Merge (并查集)
- css之relative
- 【ASO100独家】2015年App Store审核被拒的23个理由
- /usr/bin/ld: 找不到 -lippicv(ubuntu 16.04 LTS 安装opencv-3.1.0,含完整安装步骤)
- css之overflow