POJ 3259 Wormholes

来源:互联网 发布:mac snow ball powder 编辑:程序博客网 时间:2024/06/06 17:54

农民有很多农场,农场之间有路,还有虫洞……偷笑

input :

23 3 11 2 21 3 42 3 13 1 3
第一行:测试数据组

第二行:N,M,W:N=农场数,M=农场之间路,W=虫洞路。

我的理解大概就是能否检测到 负权回路,然后农民回去就看到自己。

#include<cstdio>#include<cstring>#include<algorithm>#define Size 1e8using namespace std;int n,N;struct lx{    int i,j,x;}a[5502];int bellman(){    int i,j,k,d[1001];    for(k=1;k<n;k++)    {        bool ok=0;        for(i=0;i<N;i++)        {            if(d[a[i].i]>d[a[i].j]+a[i].x)            d[a[i].i]=d[a[i].j]+a[i].x,ok=1;        }        if(!ok)break;    }    for(i=0;i<N;i++)    {        if(d[a[i].i]>d[a[i].j]+a[i].x)        return 0;    }    return 1;}int main(){    int t,m,w,x,y,k;    scanf("%d",&t);    while(t-->0)    {        scanf("%d%d%d",&n,&m,&w);        int i=0;        while(m-->0)        {            scanf("%d%d%d",&x,&y,&k);            a[i].i=x,a[i].j=y,a[i++].x=k;            a[i].i=y,a[i].j=x,a[i++].x=k;        }        while(w-->0)        {            scanf("%d%d%d",&x,&y,&k);            a[i].i=x,a[i].j=y,a[i++].x=-k;        }        N=i;        if(bellman())printf("NO\n");        else printf("YES\n");    }}


原创粉丝点击