暴力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