POJ 3259Wormholes
来源:互联网 发布:linux 启动脚本 编辑:程序博客网 时间:2024/06/02 13:12
题意:判断是否有负权回路。
用SPFA。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#define N 5210#define INF 0xfffffffusing namespace std;int cnt, dist[N], Head[N], num[N], vis[N];int n, m, w;struct Edge{ int v, w, next;} e[N];void Add(int u, int v, int w){ e[cnt].v = v; e[cnt].w = w; e[cnt].next = Head[u]; Head[u] = cnt++;}bool spfa(){ memset(vis, 0, sizeof(vis)); memset(num, 0, sizeof(num)); queue<int>Q; vis[1] = 1; dist[1] = 0; Q.push(1); num[1]++;// while(Q.size()) { int p = Q.front(); Q.pop(); vis[p] = 0; for(int i=Head[p]; i!=-1; i=e[i].next) { int q = e[i].v; if(dist[q] > dist[p] + e[i].w) { dist[q] = dist[p] + e[i].w; if(!vis[q]) { vis[q] = 1; Q.push(q); num[q]++; if(num[q] > n)//panduan return true; } } } } return false;}int main(){ int T, a, b, c; scanf("%d", &T); while(T--) { scanf("%d%d%d", &n, &m, &w); cnt = 0; memset(Head, -1, sizeof(Head)); for(int i=1; i<=n; i++) dist[i] = INF; for(int i=1; i<=m; i++) { scanf("%d%d%d", &a, &b, &c); Add(a, b, c); Add(b, a, c); } for(int i=1; i<=w; i++) { scanf("%d%d%d", &a, &b, &c); Add(a, b, -c); } if(spfa()) printf("YES\n"); else printf("NO\n"); } return 0;}
阅读全文
0 0
- poj 3259 Wormholes //SPFA
- POJ 3259 Wormholes
- poj 3259 Wormholes
- POJ 3259 Wormholes
- POJ 3259 Wormholes
- Poj 3259 Wormholes
- poj 3259 Wormholes
- poj-3259-Wormholes
- POJ-3259-Wormholes
- POJ 3259 Wormholes bellman_ford
- poj 3259 Wormholes
- poj 3259 Wormholes
- POJ 3259 Wormholes
- POJ 3259 Wormholes
- POJ 3259 Wormholes
- poj 3259 Wormholes
- POj 3259 Wormholes
- POJ 3259 Wormholes
- 2017乌鲁木齐网络赛D题 区间dp
- appium并发测试
- jquery操作复选框的总结
- Selenium with Python中文翻译(八)
- js的call方法和apply方法
- POJ 3259Wormholes
- nohup command 2>&1 &的解释
- Tools(三)——CollsionDetection
- javascript对字符串的操作
- Python matplotlib库scatter函数参数详解
- 第二周 程序的多文件组织
- 算法和数据结构可视化教程
- jquery库实现iframe自适应内容高度和宽度
- FLEX布局