• poj 3259 Wormholes 最短路(Bellman_Ford)


    题目大意:农场上有N块田地(N < = 500),M条路径(M <= 2500)

    可以从i到达j花费t单位时间。

    另外还有W个虫洞(W <= 200),虫洞可以从一块地i到达另一块地j并且时间倒退t!

    注意路径是双向的,虫洞是单向的。现在农夫John希望知道能否从某块地出发并且回到这块地,使得他回来的时间 早于 出发的时间(可以遇到他自己)。

    /*
    最短路 Bellman_Ford 求是否存在负权回路
    */
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #define N 6000
    #define INF 0x7fffffff
    using namespace std;
    typedef struct
    {
        int u,v,w;
    } by;
    by b[N];
    int n,m,w;
    int Bellman_Ford(int f)
    {
        int i,j,dis[N];
        for(i=1; i<=n; i++)
            dis[i]=INF;
        dis[1]=0;
        for(i=1; i<n; i++)
            for(j=0; j<f; j++)
                if(dis[b[j].u]<INF&&dis[b[j].v]>dis[b[j].u]+b[j].w)
                    dis[b[j].v]=dis[b[j].u]+b[j].w;
        for(i=0; i<f; i++)
            if(dis[b[i].v]>dis[b[i].u]+b[i].w)
                return 1;
        return 0;
    }
    int main()
    {
        int t,i;
        cin>>t;
        while(t--)
        {
            int f=0;
            int u1,v1,w1;
            cin>>n>>m>>w;
            for(i=0; i<=n; i++)
                b[i].u=b[i].v=b[i].w=INF;
            for(i=0; i<m; i++)
            {
                cin>>u1>>v1>>w1;
                b[f].u=b[f+1].v=u1;
                b[f].v=b[f+1].u=v1;
                b[f].w=b[f+1].w=w1;
                f+=2;
            }
            for(i=0; i<w; i++)
            {
                cin>>b[f].u>>b[f].v>>w1;
                b[f++].w=-w1;
            }
            int ans=Bellman_Ford(f);
            if(ans)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    日期时间检查(格式为:YYYY-MM-DD HH:MM:SS)
    日期合法性验证(格式为:YYYY-MM-DD或YYYY/MM/DD )
    [转]Attribute在.net编程中的应用
    WCF
    [转]使用C#开发ActiveX控件
    在 IIS 中承载 WCF 服务
    [转]一个完整的Installshield安装程序实例
    反射
    特性
    迭代器
  • 原文地址:https://www.cnblogs.com/yu0111/p/5388765.html
Copyright © 2020-2023  润新知