/*1、题目类型:图论、最短路径、Bellman-Ford算法。
2、解题思路:(1)根据输入记录所有的边,其中无向边转换为有向边记录;
(2)Bellman-Ford算法松弛所有的边,寻找是否存在负圈。
3、注意事项:注意数组的大小。
**/
#include <stdio.h>
#include <iostream>
using namespace std;
struct E{
int u,v,w;
}e[6000];
int n,m,w,d[501];
int len;
void bellman_ford(){
int i,j,flag=0;
for(i=0;i<n;i++){
flag=0;
for(j=0;j<len;j++){
if(d[e[j].v]>d[e[j].u]+e[j].w){
d[e[j].v]=d[e[j].u]+e[j].w ;
flag=1;
}
}
if(!flag)
{
puts("NO");
return;
}
}
puts("YES");
return;
}
int main(){
int f;
int u,v,cost;
cin>>f;
while(f--){
memset(d,0,sizeof(d));
len=0;
cin>>n>>m>>w;
for(int i=0;i<m;i++){
cin>>u>>v>>cost;
e[len].u=u;
e[len].v=v;
e[len++].w=cost;
e[len].u=v;
e[len].v=u;
e[len++].w=cost;
}
for(int i=0;i<w;i++){
cin>>u>>v>>cost;
e[len].u=u;
e[len].v=v;
e[len++].w=-cost;
}
bellman_ford();
}
return 0;
}
Poj 3259 Bellman-Ford算法
最新推荐文章于 2018-08-29 16:12:23 发布