关于有源上下界最大流: https://blog.csdn.net/regina8023/article/details/45815023

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n, m, k, l, r, s, t, superS, superT;
const int MAXN = 5000;//点数的最大值
const int MAXM = 120000;//边数的最大值
const int INF = 0x3f3f3f3f;
struct Edge
{int to,next,cap,flow;} edge[MAXM]; //注意是MAXM
int tol;
int head[MAXN];
void init()
{tol = 2;memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int w,int rw = 0)
{edge[tol].to = v;edge[tol].cap = w;edge[tol].flow = 0;edge[tol].next = head[u];head[u] = tol++;edge[tol].to = u;edge[tol].cap = rw;edge[tol].flow = 0;edge[tol].next = head[v];head[v] = tol++;
}
int Q[MAXN];
int dep[MAXN],cur[MAXN],sta[MAXN];
bool bfs(int s,int t,int n)
{int front = 0,tail = 0;memset(dep,-1,sizeof(dep[0])*(n+1));dep[s] = 0;Q[tail++] = s;while(front < tail){int u = Q[front++];for(int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].to;if(edge[i].cap > edge[i].flow && dep[v] == -1){dep[v] = dep[u] + 1;if(v == t)return true;Q[tail++] = v;}}}return false;
}
int dinic(int s,int t,int n)
{int maxflow = 0;while(bfs(s,t,n)){for(int i = 0; i < n; i++)cur[i] = head[i];int u = s, tail = 0;while(cur[s] != -1){if(u == t){int tp = INF;for(int i = tail-1; i >= 0; i--)tp = min(tp,edge[sta[i]].cap-edge[sta[i]].flow);maxflow += tp;for(int i = tail-1; i >= 0; i--){edge[sta[i]].flow += tp;edge[sta[i]^1].flow -= tp;if(edge[sta[i]].cap-edge[sta[i]].flow == 0)tail = i;}u = edge[sta[tail]^1].to;}else if(cur[u] != -1 && edge[cur[u]].cap > edge[cur[u]].flow && dep[u] + 1 == dep[edge[cur[u]].to]){sta[tail++] = cur[u];u = edge[cur[u]].to;}else{while(u != s && cur[u] == -1)u = edge[sta[--tail]^1].to;cur[u] = edge[cur[u]].next;}}}return maxflow;
}
int main()
{int kase = 1;while(~scanf("%d %d %d", &m, &n, &k)){scanf("%d %d", &l,  &r);s = n + m + 1;t = n + m + 2;superS = n + m + 3;superT = n + m + 4;init();for(int i = 1; i <= k; i++){int u, v;scanf("%d %d", &u , &v);addedge(u, v + n, 1); //二分图 建一条容量为1的边
        }addedge(t,s,INF); //从汇点向源点建一条inf的边for(int i = 1; i <= n; i++){addedge(s, i, r - l); //从源点向左半图连边
            addedge(superS, i, l);addedge(s, superT, l);}for(int i = 1; i <= m; i++){int aim = i + n;addedge(aim, t, r - l);addedge(aim, superT, l);addedge(superS, t, l);}printf("Case %d: ", kase++);int ans = dinic(superS, superT, n+m+4);if(ans == (n+m)*l) puts("Yes");else puts("No");}return 0;
}

转载于:https://www.cnblogs.com/Jadon97/p/9692975.html

ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph(有源上下界最大流 模板)相关推荐

  1. ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven (K短路算法模板)

    题意 : 求第k短路的权值是否超过T(权值) 解法: 网上随便找的一个求K短路的算法模板套弄一下即可 (模板要好,不然邻接表存图会TLE , 网上换了两个模板才AC的) AC代码: #include& ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛(E F G J K)

    ACM-ICPC 2018 沈阳赛区网络预赛(E F G J K) 复杂的模拟题懒癌患者表示写不动 D. Made In Heaven (K短路) 略 int head[MAXN]; int cure ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 Spare Tire(容斥+公式推)

    A sequence of integer \lbrace a_n \rbrace{an​} can be expressed as: \displaystyle a_n = \left\{ \beg ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang 分块

    https://nanti.jisuanke.com/t/31451 对每层的个数分块 当这个深度的节点个数>block时 暴力维护每个点的子树有多少个这个深度的节点 这样的层数最多有n/blo ...

  5. ACM-ICPC 2018 沈阳赛区网络预赛 D Made In Heaven(第k短路,A*算法)

    https://nanti.jisuanke.com/t/31445 题意 能否在t时间内把第k短路走完. 分析 A*算法板子. #include <iostream> #include ...

  6. 【ACM-ICPC 2018 沈阳赛区网络预赛 I】Lattice's basics in digital electronics

    [链接] 我是链接,点我呀:) [题意] [题解] 每个单词的前缀都不同. 不能更明示了... 裸的字典树. 模拟一下.输出一下就ojbk了. [代码] #include <bits/stdc+ ...

  7. Convex Hull (ACM-ICPC 2018 沈阳赛区网络预赛) 存个公式

    Convex Hull gay(i)={0ifi=k×x×x,x>k,k>1i×ielse}求∑i=1n∑j=1igay(j)=∑i=1n(n−i+1)gay(i)=∑i=1n(n−i+1 ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang(树分块)

    思路 因为不同深度的节点数量不同,数量少的节点,可以考虑直接进行单点更新,对于数量多的节点,可以直接记录这一层增加的值,查询的时候,看每一层有多少个节点,最后乘上增加的值就行了. 具体实现 先设定一个 ...

  9. 【ACM-ICPC 2018 沈阳赛区网络预赛】I.Lattice's basics in digital electronics ---- 字典树

    题目传送门 做法: 用字典树存好译码词,然后模拟即可 AC代码: #include <bits/stdc++.h> using namespace std;#define IO ios_b ...

最新文章

  1. 更新oracle数据库表如何实现主键自增长
  2. canvas之特丑时钟
  3. C++中extern关键字的作用
  4. 数据同步框架MS Sync Framework-不同场景使用例子和简要分析
  5. Kylin 对维度表的的要求
  6. linux通过usb给windows,如何从Linux创建Windows USB安装程序 | MOS86
  7. asp导出word中文乱码_你还在加班吗?“蟒蛇”办公自动化Word篇——一招搞定300页文档
  8. mac如何查看ssd寿命_固态硬盘ssd写入量剩余读写次数怎么查
  9. Java——事故应急
  10. onlyoffice 在线编辑
  11. 视频编解码学习之四:视频处理及编码标准
  12. Gut Microbes:肠道微生物谱的改变与孤独症谱系障碍的异常神经递质代谢活动相关...
  13. 一个自动生成评论的小工具
  14. 人工神经网络基本构成有哪些具有什么特征
  15. Unity实用案例之——动画压缩
  16. 南京中北学院荣跃计算机,南京师范大学中北学院来我院交流调研
  17. 猪猪女孩有多蠢,猫爪杯就有多火
  18. fttp项目下载和上传
  19. 推荐系统的评价指标笔记(NDCG、MAP、AUC、HR、MRR)
  20. 后级功放机与单声道功放机的功能有哪些区别?

热门文章

  1. Linux下svn新建用户,Linux下建立svn工程
  2. python函数的传参要求_python中函数传参详解
  3. hbuilder怎么没法插入字符了_一个你所不知道的加密方式--零宽字符加密
  4. java线程实例题_java线程相关试题实例源码代码
  5. lenze变频器怎么更改地址_S7-200 SMART PLC Modbus通信控制 V20变频器
  6. linux下storm集群配置,Twitter Storm 系统集群搭建
  7. elasticsearch中rollover的用法
  8. java高并发(三)并发编程的基础
  9. zookeeper 3.4.6安装
  10. 择天记手游的服务器维护世界,1130停服更新公告