POJ

来源:互联网 发布:淘宝规则适用者 编辑:程序博客网 时间:2024/06/17 19:33
///这个就是判断回路是否存在负环;///然后用一下佛洛依德就出来了;细节如下#include<cstdio>#include<cstring>using namespace std;int mmp[505][505],n,m,k;int floyd(){    int i,j,k;    for(k=1;k<=n;k++)        for(i=1;i<=n;i++)        {            for(j=1;j<=n;j++)                if(mmp[i][j]>mmp[i][k]+mmp[k][j]) mmp[i][j]=mmp[i][k]+mmp[k][j];///调用函数超时,写的函数也是超时;            if(mmp[i][i]<0)return 1;        }    return 0;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d%d%d",&n,&m,&k);        memset(mmp,0x3f3f3f3f,sizeof(mmp));        for(int i=1;i<=n;i++) mmp[i][i]=0;        for(int i=1;i<=m;i++)        {            int a,b,c;            scanf("%d %d %d",&a,&b,&c);            if(c<mmp[a][b]) mmp[a][b]=mmp[b][a]=c;        }        for(int i=1;i<=k;i++)        {            int a,b,c;            scanf("%d%d%d",&a,&b,&c);            mmp[a][b]=-c;        }        int f=floyd();        if(!f)printf("NO\n");        else printf("YES\n");    }    return 0;}
原创粉丝点击