会$TLE$。。。

C++ Code:(HLPP)

  1. #pragma GCC optimize(3)
  2. #pragma GCC optimize("unroll-loops")
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <vector>
  6. #include <queue>
  7. #define maxn 1210
  8. #define maxm 120010
  9. const int inf = 0x3f3f3f3f;
  10. inline int min(int a, int b) {return a < b ? a : b;}
  11. namespace Network_Flow {
  12. int st, ed, MF, n;
  13. int head[maxn], cnt = 2;
  14. struct Edge {
  15. int to, nxt, w;
  16. } e[maxm << 1];
  17. inline void addE(int a, int b, int c) {
  18. e[cnt] = (Edge) {b, head[a], c}; head[a] = cnt;
  19. e[cnt ^ 1] = (Edge) {a, head[b], 0}; head[b] = cnt ^ 1;
  20. cnt += 2;
  21. }
  22. bool inq[maxn];
  23. int GAP[maxn << 1], h[maxn];
  24. int prs[maxn];
  25. struct cmp {
  26. inline bool operator () (int a, int b) const {return h[a] < h[b];}
  27. };
  28. std::priority_queue<int, std::vector<int>, cmp> q;
  29. inline bool N(int p) {return p != st && p != ed;}
  30. inline void Push(int u) {
  31. const int H = h[u] - 1;
  32. for (register int i = head[u]; i; i = e[i].nxt) {
  33. int v = e[i].to;
  34. if (e[i].w && h[v] == H) {
  35. int w = min(prs[u], e[i].w);
  36. e[i].w -= w, e[i ^ 1].w += w;
  37. prs[u] -= w, prs[v] += w;
  38. if (v != st && v != ed && !inq[v]) {
  39. q.push(v);
  40. inq[v] = true;
  41. }
  42. if (!prs[u]) return ;
  43. }
  44. }
  45. }
  46. inline void Gap(int H) {
  47. for (register int i = 1; i <= n; i++) if (N(i) && H < h[i] && h[i] <= n) h[i] = n + 1;
  48. }
  49. namespace BFS {
  50. int Q[maxn], H, T;
  51. inline bool bfs() {
  52. memset(h, 0x3f, sizeof h);
  53. h[Q[H = T = 0] = ed] = 1;
  54. while (H <= T) {
  55. int u = Q[H++];
  56. for (int i = head[u]; i; i = e[i].nxt) {
  57. int v = e[i].to;
  58. if (e[i ^ 1].w && h[v] > h[u] + 1) {
  59. h[v] = h[u] + 1;
  60. Q[++T] = v;
  61. }
  62. }
  63. }
  64. return h[ed] != inf;
  65. }
  66. }
  67. inline void relabel(int u) {
  68. int &H = h[u] = inf;
  69. for (register int i = head[u]; i; i = e[i].nxt) {
  70. int v = e[i].to;
  71. if (e[i].w && h[v] + 1 < H) H = h[v] + 1;
  72. }
  73. }
  74. inline void HLPP(int __S, int __T) {
  75. st = __S, ed = __T;
  76. if (!BFS::bfs()) return ;
  77. h[st] = n;
  78. for (register int i = 1; i <= n; i++) if (h[i] < inf) GAP[h[i]]++;
  79. for (register int i = head[st]; i; i = e[i].nxt) {
  80. int v = e[i].to, &w = e[i].w;
  81. if (!w) continue;
  82. e[i ^ 1].w += w, prs[st] -= w, prs[v] += w;
  83. w = 0;
  84. if (v != ed && !inq[v]) {
  85. q.push(v);
  86. inq[v] = true;
  87. }
  88. }
  89. while (!q.empty()) {
  90. int u = q.top(); q.pop();
  91. inq[u] = false; Push(u);
  92. if (!prs[u]) continue;
  93. if (!--GAP[h[u]]) for (register int i = 1; i <= n; i++) if (i != st && i != ed && h[u] < h[i] && h[i] <= n) h[i] = n + 1; //Gap(h[u]);
  94. relabel(u); GAP[h[u]]++;
  95. q.push(u); inq[u] = true;
  96. }
  97. MF = prs[ed];
  98. }
  99. inline void clear() {
  100. memset(head, 0, sizeof head); cnt = 2;
  101. memset(GAP, 0, sizeof GAP); memset(prs, 0, sizeof prs);
  102. while (!q.empty()) q.pop();
  103. MF = 0;
  104. }
  105. }
  106. #define read() R::READ()
  107. #include <cctype>
  108. namespace R {
  109. int x;
  110. #ifdef ONLINE_JUGER
  111. #define M 1 << 25
  112. char op[M], *ch;
  113. inline void init() {fread(ch = op, 1, M, stdin);}
  114. inline int READ() {
  115. while (isspace(*ch)) ch++;
  116. for (x = *ch & 15, ch++; isdigit(*ch); ch++) x = x * 10 + (*ch & 15);
  117. return x;
  118. }
  119. #undef M
  120. #else
  121. char ch;
  122. inline int READ() {
  123. ch = getchar();
  124. while (isspace(ch)) ch = getchar();
  125. for (x = ch & 15, ch = getchar(); isdigit(ch); ch = getchar()) x = x * 10 + (ch & 15);
  126. return x;
  127. }
  128. #endif
  129. }
  130. int n, m, st, ed;
  131. int main() {
  132. #ifdef ONLINE_JUGER
  133. R::init();
  134. #endif
  135. Network_Flow::n = read(), m = read(), st = read(), ed = read();
  136. for (register int i = 0, a, b, c; i < m; i++) {
  137. a = read(), b = read(), c = read();
  138. Network_Flow::addE(a, b, c);
  139. }
  140. Network_Flow::HLPP(st, ed);
  141. printf("%d\n", Network_Flow::MF);
  142. return 0;
  143. }

[洛谷P4722]【模板】最大流 加强版 / 预流推进的更多相关文章

  1. 洛谷P2045 方格取数加强版(费用流)

    题意 题目链接 Sol 这题能想到费用流就不难做了 从S向(1, 1)连费用为0,流量为K的边 从(n, n)向T连费用为0,流量为K的边 对于每个点我们可以拆点限流,同时为了保证每个点只被经过一次, ...

  2. 洛谷 - P2045 - 方格取数加强版 - 费用流

    原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...

  3. 洛谷P4014 分配问题【最小/大费用流】题解+AC代码

    洛谷P4014 分配问题[最小/大费用流]题解+AC代码 题目描述 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为c ij. 试设计一个将 n 件工作分配给 n 个人做的 ...

  4. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  5. 洛谷P1120 小木棍 [数据加强版](搜索)

    洛谷P1120 小木棍 [数据加强版] 搜索+剪枝 [剪枝操作]:若某组拼接不成立,且此时 已拼接的长度为0 或 当前已拼接的长度与刚才枚举的长度之和为最终枚举的答案时,则可直接跳出循环.因为此时继续 ...

  6. 洛谷-P5357-【模板】AC自动机(二次加强版)

    题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...

  7. 图论--网络流--最大流 洛谷P4722(hlpp)

    题目描述 给定 nn 个点,mm 条有向边,给定每条边的容量,求从点 ss 到点 tt 的最大流. 输入格式 第一行包含四个正整数nn.mm.ss.tt,用空格分隔,分别表示点的个数.有向边的个数.源 ...

  8. 洛谷 P4016负载平衡问题【费用流】题解+AC代码

    洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...

  9. 洛谷P3375 [模板]KMP字符串匹配

    To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...

随机推荐

  1. 网站如何使用https

    阿里云提供了免费的证书, 先去申请免费的https证书 https://common-buy.aliyun.com/?spm=5176.10695662.958455.3.1f0c7d54HhNTG4 ...

  2. STM32CubeMx配置USART注意的一个问题

    HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, Number);意思是接收到Number个字节后,触发HAL_UART_RxCpltCal ...

  3. 转:python教程专题资源免费下载整理合集收藏

    python教程专题资源免费下载整理合集收藏 < Python学习手册(第4版)>(Learning Python, 4th Edition)[PDF] 94MB 简体中文 <Pyt ...

  4. List集合中的对象比较,取出不同对象

    今天在做金碟系统与我们系统的对接的时候需要做一个客户同步 在同步时,需要比较对象,对查询出的数据库的数据进行比较 for(int i=0;i<list2.size();i++){ if(! li ...

  5. python 推导式的用法

    推导式看了不少,可每次都有新发现 例子1:返回满足条件为真,否则为假 try_list = [1, 2, 3, 4, 5] # 前2种一样, [a > 3 for a in b] [True i ...

  6. 为WPF中DropShadowBitmapEffect提供轻量级的替代品

    原文:为WPF中DropShadowBitmapEffect提供轻量级的替代品 为WPF中DropShadowBitmapEffect提供轻量级的替代品                         ...

  7. 5 多线程 模拟qq聊天

    1.多线程思路 使用多线程完成一个全双工的QQ聊天程序 2.版本1:程序小框架 #1.收数据,然后打印 def recvData(): pass #2.检测键盘,发数据 def sendData(): ...

  8. 大数据培训班 cloudera公司讲师面对面授课 CCDH CCAH CCP

    大数据助力成就非凡.大数据正在改变着商业游戏规则,为企业解决传统业务问题带来变革的机遇.毫无疑问,当未来企业尝试分析现有海量信息以推动业务价值增值时,必定会采用大数据技术. 目前对大数据的分析工具,首 ...

  9. 「日常训练」 Soldier and Cards (CFR304D2C)

    题意 (Codeforces 546C) 按照指定的规则打牌,问谁胜或无穷尽. 分析 又是一条模拟,用set+queue(这里手写了)处理即可.注意到两种局势"1 234"和&qu ...

  10. HDFS常用文件操作

    put 上传文件    hadoop fs -put wordcount.txt   /data/wordcount/ text 查看文件内容   hadoop fs -text /output/wo ...