pku 3259(最短路径,spfa)
2010-05-02 08:57
531 查看
有n个农场,m条路径,w条虫洞路径。
随后输入m条路径,要处理双向边。然后跟w条虫洞路径,输入这个路径值时要取反。构图然后spfa判环。
随后输入m条路径,要处理双向边。然后跟w条虫洞路径,输入这个路径值时要取反。构图然后spfa判环。
#include <iostream> #include <vector> #include <queue> using namespace std; /* 传入源点s,n存储点的个数,用dis数组存下最短路径值 edge[i]存入与i相邻的点及其权值 返回值为true则无负环,为false则存在负环 */ class node { public: int v,w; }; const int inf=0x7fffffff; const int MAXN=600; int numv,dis[MAXN]; bool visit[MAXN]; int time[MAXN],n,m,w; vector<node> edge[MAXN]; bool spfa(int s) { int tmp,t,sz; queue<int> que; memset(time,0,sizeof(time)); memset(visit,false,sizeof(visit)); for(int i=0;i<=n;++i) dis[i] = inf; dis[s] = 0; que.push(s); time[s]++; //init while(!que.empty()) { tmp = que.front(); que.pop(); visit[tmp] = false; sz=edge[tmp].size(); for(int i=0;i<sz;++i) { t = edge[tmp][i].w; if(dis[edge[tmp][i].v] > dis[tmp]+t) { dis[edge[tmp][i].v] = dis[tmp] + t; if(!visit[edge[tmp][i].v]) //若该点不在队列中,则入队,并修改相应的信息 { visit[edge[tmp][i].v] = true; time[edge[tmp][i].v]++; if(time[edge[tmp][i].v] > n) return false; //若一个点的引用次数大于n则证明有负环 que.push(edge[tmp][i].v); } } } if(dis[s]<0) //判负环 return false; } return true; } int main() { int cas,s,e,t; node tmp; cin>>cas; while(cas--) { cin>>n>>m>>w; for(int i=1;i<=n;++i) edge[i].clear(); while (m--) { cin>>s>>e>>t; tmp.v=e; tmp.w=t; edge[s].push_back(tmp); tmp.v=s; tmp.w=t; edge[e].push_back(tmp); //处理双向边 } while(w--) { cin>>s>>e>>t; tmp.v=e; tmp.w= -t; edge[s].push_back(tmp); } if(spfa(1)) cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }
相关文章推荐
- pku 1511(最短路径,spfa静态邻接表)
- pku 1151 Invitation Cards(单源最短路径 SPFA)
- poj 3259 最短路径spfa判断是否有负环
- PKU3013(Big Christmas Tree)-最短路径-SPFA
- SDUT ACM 2622 最短路径 二维SPFA启蒙题。。
- 最短路径算法—SPFA(Shortest Path Faster Algorithm)算法分析与实现(C/C++)
- HDU 2112 HDU Today 【最短路径 dijkstra & floyed & SPFA 】
- HDU 3790 最短路径问题(SPFA || Dijkstra )
- 最短路径问题/Spfa
- hdu3790 最短路径问题 (Dijkstra & SPFA)
- POJ 3259 最短路径
- 最短单源路径算法——SPFA
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 单源最短路径--Bellman-Ford算法及SPFA
- 单源最短路径算法 Bellman-Ford && SPFA 及 最短路算法统一归纳
- POJ 3159 Candies(差分约束 转spfa+stack 求最短路径)
- 洛谷P3371 单源最短路径(spfa)
- hdoj 1535 Invitation Cards 【最短路径SPFA】【正反向建边求单源最短路之和】
- 【训练题】最短路径树 SPFA
- POJ 3259(最短路径)