Wormholes(Bellman-Ford)poj3259

 

#include <cstdio>
#include <cstring>

#define MAXE 2702
#define MAXV 501
#define MAXT 999999

typedef struct _Eg{
    int s,e;
    int t;
}Eg;
Eg E[MAXE];
int V[MAXV];
int N,M,W;
bool bellmanford(int sp)
{
    int i;
    int en = M+W;
    bool bm;
    memset(V, MAXT, (N+1)*sizeof(int));
   
    V[sp] = 0;
    while(V[sp]>=0)
    {
        bm=false;
        for(i=0; i<en; i++)
        {
            if(V[E[i].s]+E[i].t<V[E[i].e]){
                V[E[i].e] = V[E[i].s]+E[i].t;
                bm = true;
            }

            if((E[i].t>=0)&&(V[E[i].e]+E[i].t<V[E[i].s]))
            {
                V[E[i].s] = V[E[i].e]+E[i].t;
                bm = true;
            }
            if(V[sp]<0) return true;
        }
        if(!bm) return V[sp]<0;
    }
 return false;
}
int main()
{
    int i,j;
    int c;
       
    scanf("%d",&c);
    while(c--)
    {
        scanf("%d%d%d", &N, &M, &W);
        i=0;
        for(j=0; j<M; j++,i++)
            scanf("%d%d%d", &E[i].s, &E[i].e, &E[i].t);
        for(j=0; j<W; j++,i++)
        {
            scanf("%d%d%d", &E[i].s, &E[i].e, &E[i].t);
            E[i].t = -E[i].t;
        }
        bool br = false;
        for(i=1;i<N;i++)
        {
            if(bellmanford(i))
            {
                br=true;
    break;
            }
        }
        if(br)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

 

posted @ 2011-03-05 14:21  acm_poj  阅读(137)  评论(0)    收藏  举报