【POJ 3259】Wormholes 【spfa判负环】

来源:互联网 发布:交控集团网络商学院 编辑:程序博客网 时间:2024/04/30 01:37
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#include <vector>using namespace std;#define X first#define Y second#define INF 0x3f3f3f3f#define pii pair<int,int>const int N=550;vector<pii>e[N];int vis[N];int dis[N];int cnt[N];int n,m,w;void init(){    memset(vis,false,sizeof vis);    memset(dis,INF,sizeof dis);    memset(cnt,0,sizeof cnt);}int spfa(int root){    init();    queue<int>q;    vis[root]=true;    cnt[root]=1;    dis[root]=0;    while(!q.empty())        q.pop();        q.push(root);    while(!q.empty()){        int u=q.front();        q.pop();        vis[u]=false;        for(int i=0; i<e[u].size(); i++){            int v=e[u][i].X,k=e[u][i].Y;            if(dis[u]+k<dis[v]){                dis[v]=dis[u]+k;                if(!vis[v]){                    vis[v]=true;                    q.push(v);                    if(++cnt[v]>n){                        return 1;                    }                }            }        }    }    return 0;}int main(){    int t,u,v,c;    scanf("%d",&t);    while(t--){        scanf("%d%d%d",&n,&m,&w);        for(int i=0;i<=n;i++)            e[i].clear();        while(m--){            scanf("%d%d%d",&u,&v,&c);            e[u].push_back(pii(v,c));            e[v].push_back(pii(u,c));        }        while(w--){            scanf("%d%d%d",&u,&v,&c);            e[u].push_back(pii(v,-c));        }        bool flag=false;        for(int i=1; i<=n; i++){            if(spfa(i)){                flag=true;                printf("YES\n");                break;            }        }        if(!flag)            printf("NO\n");    }    return 0;}

0 0
原创粉丝点击