POJ3259 - Wormholes - 判负环模板题
Posted ofshk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3259 - Wormholes - 判负环模板题相关的知识,希望对你有一定的参考价值。
题意:判负环。
思路:SPFA模板题。
PS:抽个时间把SPFA写下这道题目。
Dijkstra做法:
#include<iostream>
#include<iomanip>
#include<string.h>
#include<set>
#include<stdio.h>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
int u[7550],v[7550],w[7550],dis[7550];
int bak[2550];
int main()
{
// std::ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
int f,n,m,ww;
cin>>f;
while(f--)
{
cin>>n>>m>>ww;
int aa,bb,cc;
int p=1;
for(int i=1; i<=m+ww; i++)
{
cin>>aa>>bb>>cc;
if(i<=m)
{
u[p]=aa;
v[p]=bb;
w[p]=cc;
p++;
u[p]=bb;
v[p]=aa;
w[p]=cc;
p++;
}
else
{
u[p]=aa;
v[p]=bb;
w[p]=-cc;
p++;
}
}
for(int i=1; i<=n; i++)
dis[i]=inf;
dis[1]=0;
int check;
for(int k=1; k<=n-1; k++)
{
check=0;
for(int i=1; i<=m*2+ww; i++)
{
if(dis[v[i]]>dis[u[i]]+w[i])
{
dis[v[i]]=dis[u[i]]+w[i];
check=1;
}
}
if(check==0)
break;
}
int flag=0;
for(int i=1; i<=m*2+ww; i++)
{
if(dis[v[i]]>dis[u[i]]+w[i])
flag=1;
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
以上是关于POJ3259 - Wormholes - 判负环模板题的主要内容,如果未能解决你的问题,请参考以下文章