Wormholes POJ - 3259 spfa判断负环

//判断负环     dist初始化为正无穷
//正环 负无穷
#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int N = , M = ;
int dist[N];
int h[N], e[M], w[M], ne[M], idx;
int n,m,z;
void add(int a,int b,int c)
{
e[idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx++;
}
bool st[N];
int times[N];
bool spfa()
{
memset(st,,sizeof st);
memset(times,,sizeof times);
queue<int>q;
for(int i=;i<=n;i++)
{
q.push(i);
st[i]=;
times[i]++;
}
while(q.size())
{
int t=q.front();
q.pop();
st[t]=;
for(int i=h[t];~i;i=ne[i])
{
int j=e[i];
if(dist[j]>dist[t]+w[i])
{
dist[j]=dist[t]+w[i];
if(!st[j])
{
st[j]=;
q.push(j);
times[j]++;
if(times[j]>n)
return true;
}
}
}
}
return false;
}
int main()
{
int t,a,b,c;
cin>>t;
while(t--)
{
cin>>n>>m>>z;
idx=;
memset(h,-,sizeof h);
memset(dist,0x3f,sizeof dist);
for(int i=;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
for(int i=;i<=z;i++)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,-c);
}
if(spfa())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return ;
}

文章来源地址https://www.yii666.com/article/756147.html文章地址https://www.yii666.com/article/756147.html网址:yii666.com<网址:yii666.com文章来源地址:https://www.yii666.com/article/756147.html

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png