POJ 3259(Wormholes)

链接:https://vjudge.net/problem/POJ-3259

思路:一个裸着的判断是否存在负环即可,可用Bellman-Ford算法判断负环的形式,但是一定要注意,秘密通道和走廊是可以同时存在,也就是既要花费时间也要回溯时间。

代码:

#include
#include
using namespace std;

struct edge{
    int from,to,cost;
};

edge es[5500];

int d[5500];
const int INF = 1e9;
int n,m,w,t=0;
//Bellman-Ford算法判断负环的形式
bool findf(){
memset(d,0,sizeof(d));
        for(int i=0;id[e.from]+e.cost){
                    d[e.to] = d[e.from] + e.cost;
           if(i==n-1)return true;
                }
        }
        }
   return false; 
}

int main(){
    int q;
    cin>>q;
    while(q--){
        cin>>n>>m>>w;
        t = 0;
        for(int i=0;i>from>>to>>cost;
            from--;
            to--;
            es[t].from = from;
            es[t].to = to;
            es[t].cost = cost;
            t++;
//注意这是一个无向图
            es[t].from = to;
            es[t].to = from;
            es[t].cost = cost;
            t++;
        }
        for(int i=0;i>from>>to>>cost;
            --from;
            --to;
            es[t].from = from;
            es[t].to = to;
            es[t].cost = -cost;
            t++;
        }
        if(findf())cout<<"YES\n";
        else cout<<"NO\n";
        }
    return 0;
}

你可能感兴趣的:(POJ 3259(Wormholes))