传送门

貌似就是转成无源汇,然后两遍最大流搞定?

其实第二遍跑最大流是自动加上了第一次的答案。

代码:

  1. #include<bits/stdc++.h>
  2. #define N 100005
  3. #define M 2000010
  4. #define inf 0x3f3f3f3f
  5. using namespace std;
  6. inline int read(){
  7. int ans=0;
  8. char ch=getchar();
  9. while(!isdigit(ch))ch=getchar();
  10. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  11. return ans;
  12. }
  13. int first[N],s,t,ss,tt,n,m,d[N],cnt=-1,m_[N];
  14. struct Node{int v,next,c;}e[M];
  15. inline void add(int u,int v,int c){e[++cnt].v=v,e[cnt].c=c,e[cnt].next=first[u],first[u]=cnt;}
  16. inline bool bfs(){
  17. queue<int>q;
  18. memset(d,-1,sizeof(d));
  19. q.push(s),d[s]=0;
  20. while(!q.empty()){
  21. int x=q.front();
  22. q.pop();
  23. for(int i=first[x];~i;i=e[i].next){
  24. int v=e[i].v;
  25. if(d[v]!=-1||e[i].c<=0)continue;
  26. d[v]=d[x]+1;
  27. if(v==t)return true;
  28. q.push(v);
  29. }
  30. }
  31. return false;
  32. }
  33. inline int dfs(int x,int f){
  34. if(x==t||!f)return f;
  35. int flow=f;
  36. for(int i=first[x];~i;i=e[i].next){
  37. int v=e[i].v;
  38. if(flow&&d[v]==d[x]+1&&e[i].c>0){
  39. int tmp=dfs(v,min(flow,e[i].c));
  40. if(!tmp)d[v]=-1;
  41. e[i].c-=tmp,e[i^1].c+=tmp,flow-=tmp;
  42. }
  43. }
  44. return f-flow;
  45. }
  46. inline bool check(){
  47. for(int i=first[s];~i;i=e[i].next)if(e[i].c>0)return false;
  48. for(int i=first[t];~i;i=e[i].next)if(e[i^1].c>0)return false;
  49. return true;
  50. }
  51. inline int solve(){
  52. int ret=0;
  53. while(bfs())ret+=dfs(s,inf);
  54. return ret;
  55. }
  56. int main(){
  57. memset(first,-1,sizeof(first));
  58. int sum=0;
  59. n=read(),m=read(),ss=read(),tt=read(),s=0,t=n+1;
  60. for(int i=1;i<=m;++i){
  61. int u=read(),v=read(),down=read(),up=read();
  62. m_[u]-=down,m_[v]+=down,add(u,v,up-down),add(v,u,0);
  63. }
  64. for(int i=1;i<=n;++i){
  65. if(m_[i]>0)add(s,i,m_[i]),sum+=m_[i],add(i,s,0);
  66. if(m_[i]<0)add(i,t,-m_[i]),add(t,i,0);
  67. }
  68. add(tt,ss,inf),add(ss,tt,0);
  69. if(solve()!=sum){cout<<"please go home to sleep";return 0;}
  70. first[s]=first[t]=-1;
  71. s=ss,t=tt;
  72. cout<<solve();
  73. return 0;
  74. }

2018.08.20 loj#116. 有源汇有上下界最大流(模板)的更多相关文章

  1. 2018.08.20 loj#117. 有源汇有上下界最小流(模板)

    传送门 这题真有意思... 先是有一个点T的我怀疑人生. 然后学大佬们封装了我的dinic就莫名其妙的过了??? 所以说锅给谁好呢? 给dinic吧... 解法就是先求出一段可行流,然后从t到s加一条 ...

  2. 2018.08.20 loj#115. 无源汇有上下界可行流(模板)

    传送门 又get到一个新技能,好兴奋的说啊. 一道无源汇有上下界可行流的模板题. 其实这东西也不难,就是将下界变形而已. 准确来说,就是对于每个点,我们算出会从它那里强制流入与流出的流量,然后与超级源 ...

  3. loj #116. 有源汇有上下界最大流

    题目链接 有源汇有上下界最大流,->上下界网络流 注意细节,重置cur和dis数组时,有n+2个点 #include<cstdio> #include<algorithm> ...

  4. LibreOJ #116. 有源汇有上下界最大流

    二次联通门 : LibreOJ #116. 有源汇有上下界最大流 /* LibreOJ #116. 有源汇有上下界最大流 板子题 我也就会写写板子题了.. 写个板子第一个点还死活过不去... 只能打个 ...

  5. loj #117. 有源汇有上下界最小流

    题目链接 有源汇有上下界最小流,->上下界网络流 注意细节,边数组也要算上后加到SS,TT边. #include<cstdio> #include<algorithm> ...

  6. Loj#116-[模板]有源汇有上下界最大流

    正题 题目链接:https://loj.ac/p/116 题目大意 \(n\)个点\(m\)条边的一张图,每条边有流量上下限制,求源点到汇点的最大流. 解题思路 先别急着求上面那个,考虑一下怎么求无源 ...

  7. LOJ.117.[模板]有源汇有上下界最小流(Dinic)

    题目链接 有源汇有上下界最小流 Sol1. 首先和无源汇网络流一样建图,求SS->TT最大流: 然后连边(T->S,[0,INF]),再求一遍SS->TT最大流,答案为新添加边的流量 ...

  8. 【Loj116】有源汇有上下界最大流(网络流)

    [Loj116]有源汇有上下界最大流(网络流) 题面 Loj 题解 模板题. #include<iostream> #include<cstdio> #include<c ...

  9. LOJ116 - 有源汇有上下界最大流

    原题链接 Description 模板题啦~ Code //有源汇有上下界最大流 #include <cstdio> #include <cstring> #include & ...

随机推荐

  1. 多线程--Java

    多线程: 1.进程和线程 进程是资源分配的最小单位,线程是CPU调度的最小单位. 每个进程的创建都需要系统为其开辟资源内存空间,并发执行的程序在执行过程中分配和管理资源的基本单位,速度和销毁也较慢.进 ...

  2. 从底层谈WebGIS 原理设计与实现(五):WebGIS中通过行列号来换算出多种瓦片的URL 之在线地图

    从底层谈WebGIS 原理设计与实现(五):WebGIS中通过行列号来换算出多种瓦片的URL 之在线地图 作者:naaoveGI…    文章来源:naaoveGIS    点击数:2063    更 ...

  3. python之commands模块

    要获得shell命令的输出只需要`cmd`命令就可以了, 需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果.看一下三个函数:1). comm ...

  4. Haskell语言学习笔记(49)ByteString Text

    Data.ByteString String 是 [Char] 的同义词,在使用上存在List的惰性所带来的性能问题. 在处理大型二进制文件时,可以使用 ByteString 来代替 String. ...

  5. dowhile

    public class TestDoWhile { /**do while 至少执行一次 先斩后奏 * 测试dowhile */ public static void main(String[] a ...

  6. Django入门-简单的登录

    1.登录页面   2.项目目录结构   3.需要修改四个文件 urls.py-------路径与函数之间的对应关系 views.py-------函数定义与逻辑处理 加入一个login.html文件 ...

  7. SpringCloud之Eureka 服务注册和服务发现基础篇2

    上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix ...

  8. IntelliJ IDEA project module

    在IDEA 创建一个project,目录结构是这样的:在project下创建一个module之后目录结构是这样的: 简单的概括如下: IntelliJ系中的 Project  相当于Eclipse系中 ...

  9. 可能空字符串转换为浮点型或者整数型:java.lang.NumberFormatException: For input string: " "

    Integer.valueOf(str.equals("")?"0":str)

  10. Cannot create inner bean '(inner bean)#67f903b5' of typ

    严重: Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error crea ...