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;
}

浙公网安备 33010602011771号