您的位置:首页 > 其它

POJ3259 Bellman-Ford算法 求负环

2015-05-25 10:07 274 查看
暴力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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: