• E


    - 题目大意

        个人要穿越到未来,但是之后还要回去,并且回去的时间要在他穿越之前。

    - 解题思路

        我们可以把在虫洞中的时间看做是负边权,然后利用bellman-ford算法来判断有没有负环即可。

    - 代码

    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int M=1e5;
    const int INF=0x3f3f3f;
    int d[M],cnt;
    struct edge{
       int u,v,w;
    }e[M];
    
    bool BellmanFord(int s,int n,int m)
    {
        memset(d,INF,sizeof(d));
        d[s]=0;
        bool updated=true;
        int round =0;
        while(updated)
        {
            updated=false;
            round++;
            for(int i=0;i<m;i++)
            {
                int u=e[i].u,v=e[i].v,w=e[i].w;
                if(d[v]>d[u]+w)
                   {
                       d[v]=d[u]+w;
                       updated=true;
                   }
            }
    
        if(round>=n&&updated)
            return true;
        }
        return false;
    }
    
    int main()
    {
        int t,n,m,w,k,s,time;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d",&n,&m,&w);
            cnt=0;
            for(int i=0;i<m;i++)
            {
                scanf("%d%d%d",&s,&k,&time);
                e[cnt].u=s;
                e[cnt].v=k;
                e[cnt++].w=time;
                e[cnt].u=k;
                e[cnt].v=s;
                e[cnt++].w=time;
            }
            for(int i=0;i<w;i++)
            {
                scanf("%d%d%d",&s,&k,&time);
                e[cnt].u=s;
                e[cnt].v=k;
                e[cnt++].w=-time;
            }
            if(BellmanFord(1,n,cnt))
                printf("%s
    ","YES");
            else
                printf("%s
    ","NO");
        }
    }
    

      

  • 相关阅读:
    adb monkey测试 命令
    大数据 入门
    代码设计模式 编写思想 架构
    汉化 android studio
    电脑时间显示秒 win10电脑显示农历
    Restful api介绍
    Map工具系列-03-代码生成BySQl工具使用说明
    win10 office2013激活工具
    win10 1607 密匙
    .net社区
  • 原文地址:https://www.cnblogs.com/alpacadh/p/8449535.html
Copyright © 2020-2023  润新知