• CJOJ1857 -PG图


    Description

    背景
    LDN不知道为什么特别喜欢PG,也许是某种原因吧……
    有一天,他发明了一个游戏“PG图”。
    问题描述

    给定一个有向图,每条边都有一个权值。
    每次你可以选择一个节点u和一个整数d,把所有以u为终点的边的权值减小d,把所有以u为起点的边的权值加上d。最后要让所有边的权值的最小值为正且尽量大。

    ***首先吐槽一下这哪是HAOI2015的题目。。。

    经过人类智慧可得之,这题关键在环。只要有环,这个环上边的总和是不变的,而其它地方是随便变的。

    so,二分答案,所有边减二分值跑SPFA,发现负环即不符合条件。最后答案减1即可。

    #include<bits/stdc++.h>
    #define ll long long
    #define re register
    #define il inline
    #define fp(i,a,b) for(re int i=a;i<=b;i++)
    #define fq(i,a,b) for(re int i=a;i>=b;i--)
    using namespace std;
    const int N=805;
    int h[N],cnt,n,m,vis[N],dis[N],w[N];
    struct Edge
    {
      int to,next,w;
    }e[N<<2];
    il void add(re int u,re int v,re int w)
    {
      e[++cnt]=(Edge){v,h[u],w};h[u]=cnt;
    }
    il bool SPFA(re int u)
    {
      vis[u]=1;
      for(re int i=h[u];i+1;i=e[i].next)
        {
          re int v=e[i].to;
          if(dis[v]>dis[u]+w[i])
        {
          if(vis[v]) return 1;//弄出负环即可
          dis[v]=dis[u]+w[i];
          if(SPFA(v)) return 1;
        }
        }
      return vis[u]=0;
    }
    int main()
    {
      ios::sync_with_stdio(false);
      while(cin>>n)
        {
          cin>>m;
          memset(h,-1,sizeof(h));cnt=0;
          fp(i,1,m)
        {
          re int u,v,w;cin>>u>>v>>w;
          add(u,v,w);
        }
          re int l=1,r=10005;
          while(l<=r)
        {
          re int mid=l+r>>1,flag=0;
           fp(i,1,m) w[i]=e[i].w-mid;
           fp(i,1,n)
             {
               memset(vis,0,sizeof(vis));memset(dis,63,sizeof(dis));
               if(SPFA(i)) {flag=1;break;}
             }
           if(flag) r=mid-1;
           else l=mid+1;
        }
          if(!r) cout<<"No Solution"<<endl;
          else if(r==10005) cout<<"Infinite"<<endl;
          else cout<<r<<endl;
        }
      return 0;
    }

  • 相关阅读:
    TSQL存储过程:获取父级类别图片
    ASP.NET小收集<7>:JS创建FORM并提交
    JS收集<4>:限制输入搜索串
    js编码风格
    学习日志0504
    记于20120508日晚
    NHibernate中的Session yangan
    SQL Server2005排名函数 yangan
    让IE8兼容网页,简单开启兼容模式 yangan
    Log4Net跟我一起一步步 yangan
  • 原文地址:https://www.cnblogs.com/yanshannan/p/8463606.html
Copyright © 2020-2023  润新知