poj 3259 Wormholes 最短路

简介:

     bellman判环即可


/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
Build Time:2013-05-07-22.01

*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#define INF 1E9
using namespace std;
int n,m,w;
int first[505];
int U[7000];
int next[7000];
int edge[7000];
int cnt;

void build(int v,int u,int s)
{
    next[cnt]=first[v];
    first[v]=cnt;
    edge[cnt]=s;
    U[cnt]=u;
    cnt++;
}

queue<int> q;
int dis[505];
int in[505];
int bellman()
{
    bool inq[505];
    memset(inq,0,sizeof(inq));
    memset(dis,127,sizeof(dis));
    memset(in,0,sizeof(in));
    while(!q.empty())q.pop();
    q.push(1);
    in[1]=1;
    dis[1]=0;
    int v,u,i,t;
    while(!q.empty())
    {
        v=q.front();q.pop();
        inq[v]=0;
        for(i=first[v];i!=-1;i=next[i])
        {
            u=U[i];
            if(dis[u]>(t=dis[v]+edge[i]))
            {
                dis[u]=t;
                if(inq[u])continue;
                inq[u]=1;
                in[u]++;
                if(in[u]>n)return 1;
                q.push(u);
            }
        }
    }
    return 0;
}



int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        memset(first,-1,sizeof(first));
        cnt=0;
        scanf("%d%d%d",&n,&m,&w);
        int i,u,v,s;
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&v,&u,&s);
            build(v,u,s);
            build(u,v,s);
        }
        for(i=0;i<w;i++)
        {
            scanf("%d%d%d",&v,&u,&s);
            build(v,u,-s);
        }

        if(bellman())puts("YES");
        else puts("NO");
    }
}


目录
相关文章
poj 1185 炮兵阵地 (状态压缩dp)
如果你是刚刚开始做状态压缩dp,我建议你先看看 poj 3254 Corn Fields 这是一道比这一题更简单,更容易入门的题目。 还有在代码中我用了一个很巧妙的方法求一个数二进制数中1的个数 具体请看我博客中 x& (x - 1)==0 这篇文章 链接 。
41 1
POJ-2253,Frogger(最短路问题)
POJ-2253,Frogger(最短路问题)
HDU-1874,畅通工程续(Floyd最短路)
HDU-1874,畅通工程续(Floyd最短路)
|
人机交互
POJ-2524,Ubiquitous Religions(并查集模板题)
POJ-2524,Ubiquitous Religions(并查集模板题)
|
Java 机器学习/深度学习
UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 65817    Accepted Submission(s): 28794 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。
1150 0
|
并行计算 算法 Java
HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 53806    Accepted Submission(s): 20092 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。
1086 0