POJ3259 Bellman-Ford算法 求负环

暴力bf…1954ms 差6ms卡过.

#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
int n;
int G[1000][1000];

bool bf()
{
    int res[n+1];
    memset(res,0x3f,sizeof(res));
    res[1]=0;
    for(int k=1;k<=n-1;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(res[j]>res[i]+G[i][j])
                    res[j]=res[i]+G[i][j];
            }
        }
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            //printf("%d %d %d %d\n",res[j],res[i],G[i][j],res[i]+G[i][j]);
            if(res[j]>res[i]+G[i][j])
                return true;
        }
    }
    return false;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(G,0x3f,sizeof(G));
        int m,w;
        scanf("%d%d%d",&n,&m,&w);
        for(int i=1;i<=n;i++) G[i][i]=0;

        int from,to,val;
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&from,&to,&val);
            if(G[from][to]>val)
                G[from][to]=G[to][from]=val;
        }
        for(int i=1;i<=w;i++)
        {
            scanf("%d%d%d",&from,&to,&val);
            G[from][to]=-val;
        }

        if(bf()) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}
Close
    原文作者:Bellman - ford算法
    原文地址: https://blog.csdn.net/mrkdian/article/details/45966451
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞