zoukankan      html  css  js  c++  java
  • 洛谷P1993 小K的农场_差分约束_dfs跑SPFA

    Code: 

    #include<cstdio>
    #include<queue>
    using namespace std;
    const int N=10000+233;
    const int INF=10000000;
    int head[N],to[N<<1],nex[N<<1],val[N<<1],vis[N],d[N];
    int cnt;
    void add_edge(int u,int v,int c)
    {
        nex[++cnt]=head[u],head[u]=cnt;
        to[cnt]=v,val[cnt]=c;
    }
    int spfa(int u)
    {
        vis[u]=1;
        for(int v=head[u];v;v=nex[v])
        {
            int x=to[v];
            if(d[u]+val[v]<d[x])
            {
                 d[x]=d[u]+val[v];
                if(vis[x]==1)return 0;
                if(spfa(x)==0)return 0;
            }
        }
        vis[u]=0;
        return 1;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i)d[i]=INF;
        for(int i=1;i<=m;++i)
        {
            int Ty,a,b,c;
            scanf("%d%d%d",&Ty,&a,&b);
            if(Ty!=3)scanf("%d",&c);
            if(Ty==1)
                add_edge(a,b,-c);
            if(Ty==2)
                add_edge(b,a,c);
            if(Ty==3)
            {
                c=0;
                add_edge(b,a,c);
                add_edge(a,b,-c);
            }
        }
        int ans=1;
        for(int i=1;i<=n;++i)
        {
            if(vis[i]==0)
                if(!spfa(i))
                {
                    ans=0;break;
                }
        }
        if(ans==0)printf("No");
        else printf("Yes");
        return 0;
    }
    

      

  • 相关阅读:
    css3
    jquery常用的几种配置
    1808第一周笔记
    webpack打包的用法
    模块的使用及几类方式
    node的规范(common.js)
    模块化开发
    传统开发模式的缺点
    创建百度地图
    离线缓存总结
  • 原文地址:https://www.cnblogs.com/guangheli/p/9845152.html
Copyright © 2011-2022 走看看