zoukankan      html  css  js  c++  java
  • POJ 3259 Wormholes

    SPFA判一下是否存在负环即可。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    const int INF=0x7FFFFFFF;
    const int maxn=500+10;
    int n,m,w;
    int g[maxn][maxn];
    int dis[maxn],flag[maxn],tot[maxn];
    bool fail;
    
    void SPFA()
    {
        queue<int>Q;
        for(int i=1; i<=n; i++)
            dis[i]=INF,flag[i]=0,tot[i]=0;;
        flag[1]=1; Q.push(1); dis[1]=0;
        while(!Q.empty())
        {
            int head=Q.front();
            Q.pop(); flag[head]=0; tot[head]++;
            if(tot[head]>=n) { fail=1; break; }
            for(int k=1; k<=n; k++)
            {
                if(g[head][k]==INF||k==head) continue;
                if(dis[head]+g[head][k]<dis[k])
                {
                    dis[k]=dis[head]+g[head][k];
                    if(flag[k]==0) { Q.push(k); flag[k]=1; }
                }
            }
        }
    }
    
    int main()
    {
        int F;
        scanf("%d",&F);
        while(F--)
        {
            fail=0;
            scanf("%d%d%d",&n,&m,&w);
            for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) g[i][j]=INF;
            for(int i=1; i<=m; i++)
            {
                int S,E,T;
                scanf("%d%d%d",&S,&E,&T);
                g[S][E]=g[E][S]=min(g[E][S],T);
            }
            for(int i=1; i<=w; i++)
            {
                int S,E,T;
                scanf("%d%d%d",&S,&E,&T);
                g[S][E]=min(g[S][E],-T);
            }
            SPFA();
            if(fail) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    jquery学习11.3.4
    寒假帝释天
    我的2010年
    终于放假了!!!
    2010.1.21
    寒假第五天
    关于三层架构
    js正则表达式限制文本框只能输入数字,小数点,英文字母
    windows的命令行方式下TAB键自动补全设置方法
    Oracle的一些常用命令
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5360785.html
Copyright © 2011-2022 走看看