• [P2850][USACO06DEC]虫洞Wormholes (最短路)


    死活调不出来

    后来是发现这题建边的原因……

    吐血.jpg

    所谓的虫洞传说也就是负边了

    然后这里打的spfa和原来的不一样

    感觉hzwer大佬的spfa好强啊……

    也更易写一点

    贴代码

    #include<bits/stdc++.h>
    #define max(a,b) (a>b?a:b)
    #define min(a,b) (a<b?a:b)
    #define ll long long
    #define N 100005
    #define INF 2147483647
    using namespace std;
    inline int read() {
        int f = 1, x = 0; char ch;
        do { ch = getchar(); if (ch == '-')f = -1; } while (ch<'0' || ch>'9');
        do { x = x * 10 + ch - '0'; ch = getchar(); } while (ch >= '0'&&ch <= '9');
        return f * x;
    }
    bool flag;
    int n,m,w,cnt;
    int head[505],dis[505];
    bool mark[505];
    struct data{
        int to,next,v;
    }e[100005];
    void add(int u,int v,int w)
    {
        e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;e[cnt].v=w;
    }
    void spfa(int x)
    {
         mark[x]=1;
         for(int i=head[x];i;i=e[i].next)
             if(e[i].v+dis[x]<dis[e[i].to])
             {
                  if(mark[e[i].to]){flag=1;return;}
                  else
                  {
                       dis[e[i].to]=e[i].v+dis[x];
                       spfa(e[i].to);
                  }
             }
         mark[x]=0;
    }
    bool check()
    {
        for(int i=1;i<=n;i++){
            dis[i]=INF;
            mark[i]=0;
        }
        flag=0;
        for(int i=1;i<=n;i++)
        {
            dis[i]=0;
            spfa(i);
            if(flag) return 1;
        }
        return 0;
    }
    int main()
    {
        int F=read();
        while(F--)
        {
            cnt=0;
            n=read(),m=read(),w=read();
            memset(head,0,sizeof(head));
            for(int i=1;i<=m;i++)
            {
                int s=read(),e=read(),t=read();
                add(s,e,t);
                add(e,s,t);
            }
            for(int i=1;i<=w;i++)
            {
                int s=read(),e=read(),t=read();
                add(s,e,-t);
            }
            if(check()) puts("YES");
            else puts("NO");
        }
        return 0;
    }
  • 相关阅读:
    css学习总结
    bootstrap的学习总结
    一些组件配置的理解
    php 微信公众号支付(小程序也是这么支付的)
    mysql 链接超过ip限制时的报错
    php生成二维码
    wamp配置虚拟主机 php 5.6.25
    php 渣全的循环
    4、kafka、spark streaming
    gauss消元
  • 原文地址:https://www.cnblogs.com/lincold/p/9831973.html
Copyright © 2020-2023  润新知