POJ3259 - Wormholes - 判负环模板题

题意:判负环。

思路:SPFA模板题。

PS:抽个时间把SPFA写下这道题目。

Dijkstra做法:

#include
#include
#include
#include
#include
#include
#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"<

你可能感兴趣的:(POJ3259 - Wormholes - 判负环模板题)