跑出最短路图,然后把结点拆点跑最大流。

  1. #include<cstdio>
  2. #include<queue>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. #define M 100001
  8. #define INF 2147483647
  9. #define N 501
  10. typedef long long ll;
  11. namespace Net
  12. {
  13. int v[M<<1],next[M<<1],first[N<<1],en,cap[M<<1];
  14. queue<int>q;
  15. void AddEdge(int U,int V,int Cap)
  16. {
  17. v[en]=V; cap[en]=Cap; next[en]=first[U]; first[U]=en++;
  18. v[en]=U; next[en]=first[V]; first[V]=en++;
  19. }
  20. int S,T,n;
  21. int d[N<<1],cur[N<<1];
  22. int bfs()
  23. {
  24. memset(d,-1,sizeof(int)*(n+1));
  25. d[S]=0;
  26. q.push(S);
  27. while(!q.empty())
  28. {
  29. int U=q.front(); q.pop();
  30. for(int i=first[U];i!=-1;i=next[i])
  31. if(cap[i]&&d[v[i]]==-1)
  32. {
  33. d[v[i]]=d[U]+1;
  34. q.push(v[i]);
  35. }
  36. }
  37. return d[T]!=-1;
  38. }
  39. int dfs(int U,int a)
  40. {
  41. if(U==T||(!a))
  42. return a;
  43. int f,Flow=0;
  44. for(int &i=cur[U];i!=-1;i=next[i])
  45. if(d[v[i]]==d[U]+1&&(f=dfs(v[i],min(a,cap[i]))))
  46. {
  47. cap[i]-=f; cap[i^1]+=f;
  48. Flow+=f; a-=f;
  49. if(!a) break;
  50. }
  51. if(!Flow) d[U]=-1;
  52. return Flow;
  53. }
  54. ll MaxFlow()
  55. {
  56. ll Flow=0;
  57. int tmp;
  58. while(bfs())
  59. {
  60. memcpy(cur,first,sizeof(int)*(n+1));
  61. while(tmp=dfs(S,INF))
  62. Flow+=(ll)tmp;
  63. }
  64. return Flow;
  65. }
  66. };
  67. namespace SP
  68. {
  69. int n,m;
  70. queue<int>q;
  71. int v[M<<1],w[M<<1],next[M<<1],first[N],en;
  72. void AddEdge(int U,int V,int W)
  73. {
  74. v[++en]=V;
  75. w[en]=W;
  76. next[en]=first[U];
  77. first[U]=en;
  78. }
  79. ll d[N];
  80. bool inq[N];
  81. void spfa(int S)
  82. {
  83. for(int i=1;i<=n;++i)
  84. d[i]=INF;
  85. d[S]=0;
  86. q.push(S);
  87. inq[S]=1;
  88. while(!q.empty())
  89. {
  90. int U=q.front();
  91. for(int i=first[U];i;i=next[i])
  92. if(d[U]+(ll)w[i]<d[v[i]])
  93. {
  94. d[v[i]]=d[U]+(ll)w[i];
  95. if(!inq[v[i]])
  96. {
  97. inq[v[i]]=1;
  98. q.push(v[i]);
  99. }
  100. }
  101. q.pop(); inq[U]=0;
  102. }
  103. }
  104. };
  105. int Map(int x,bool op)
  106. {
  107. if(x==Net::S||x==Net::T)
  108. return x;
  109. return ((!op)?((x<<1)-2):((x<<1)-1));
  110. }
  111. int main()
  112. {
  113. int x,y,z;
  114. scanf("%d%d",&SP::n,&SP::m);
  115. for(int i=1;i<=SP::m;++i)
  116. {
  117. scanf("%d%d%d",&x,&y,&z);
  118. SP::AddEdge(x,y,z);
  119. SP::AddEdge(y,x,z);
  120. }
  121. SP::spfa(1);
  122. Net::S=1;
  123. Net::T=2*SP::n-2;
  124. Net::n=2*SP::n-2;
  125. memset(Net::first,-1,sizeof(int)*(Net::n+1));
  126. for(int i=1;i<=SP::en;i+=2)
  127. {
  128. if(SP::d[SP::v[i+1]]+(ll)SP::w[i]==SP::d[SP::v[i]])
  129. Net::AddEdge(Map(SP::v[i+1],1),Map(SP::v[i],0),INF);
  130. if(SP::d[SP::v[i]]+(ll)SP::w[i]==SP::d[SP::v[i+1]])
  131. Net::AddEdge(Map(SP::v[i],1),Map(SP::v[i+1],0),INF);
  132. }
  133. scanf("%d",&x);
  134. for(int i=2;i<SP::n;++i)
  135. {
  136. scanf("%d",&x);
  137. Net::AddEdge(Map(i,0),Map(i,1),x);
  138. }
  139. scanf("%d",&x);
  140. cout<<Net::MaxFlow()<<endl;
  141. return 0;
  142. }

【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量的更多相关文章

  1. bzoj千题计划136:bzoj3931: [CQOI2015]网络吞吐量

    http://www.lydsy.com/JudgeOnline/problem.php?id=3931 在最短路网络上跑最大流 #include<queue> #include<c ...

  2. bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)

    3931: [CQOI2015]网络吞吐量 题目:传送门 题解: 现在有点难受....跳了一个多钟...菜啊... 题意都把做法一起给了....最短路+网路流啊. 不想说话...记得开long lon ...

  3. bzoj3931: [CQOI2015]网络吞吐量

    将最短路图找出来,跑maxflow即可.有注意到数据范围.然后输出的时候%dWA了三次QAQ... #include<cstdio> #include<cstring> #in ...

  4. BZOJ3931 [CQOI2015]网络吞吐量(最大流)

    没啥好说的,有写过类似的,就是预处理出最短路上的边建容量网络. #include<cstdio> #include<cstring> #include<queue> ...

  5. [bzoj3931][CQOI2015]网络吞吐量——最短路+网络流

    题目 传送门 题解 第一次一遍就AC一道bzoj上的题,虽然是一道水题... 我们做一边最短路,求出每个点的dist,然后再做一次类似spfa的操作,求出每个点是否可以用于建图. 在新图上拆点跑一边d ...

  6. 【BZOJ3931】[CQOI2015]网络吞吐量 最大流

    [BZOJ3931][CQOI2015]网络吞吐量 Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为 ...

  7. 【BZOJ-3931】网络吞吐量 最短路 + 最大流

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1228  Solved: 524[Submit][Stat ...

  8. BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )

    最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...

  9. BZOJ 3931: [CQOI2015]网络吞吐量 最大流

    3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

随机推荐

  1. MySQL的字符集小结

    正确了解MySQL的字符集问题,能够从根本上解决乱码的困扰. 首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对 ...

  2. 对zip文件进行解压操作和对一个文件进行压缩操作

    注意这里用的是apche下的zip package org.springframework.validation; import org.apache.tools.zip.ZipEntry; impo ...

  3. linux 学习好资源

    Linux-Wiki.cn http://linux-wiki.cn/wiki/zh-hans/Linux%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84    Linux目录 ...

  4. 知问前端——按钮UI

    按钮(button),可以给生硬的原生按钮或者文本提供更多丰富多彩的外观.它不单单可以设置按钮或文本,还可以设置单选按钮和多选按钮. 使用button按钮 使用button按钮UI的时候,不一定必须是 ...

  5. 【BZOJ】5010: [Fjoi2017]矩阵填数

    [算法]离散化+容斥原理 [题意]给定大矩阵,可以每格都可以任意填1~m,给定n个子矩阵,要求满足子矩阵内的最大值为vi,求方案数. n<=10,h,w<=1w. [题解] 此题重点之一在 ...

  6. sender的作用

        https://www.evernote.com/shard/s227/sh/c2441a07-6b7e-4659-8452-9f768ee9cc66/73a115ed352421e10629 ...

  7. 【洛谷 P2346】四子连棋(状态压缩,搜索)

    其实这题可以直接二进制状压做,1表示黑棋,0表示白棋,另外记录下2个空点的位置就行了. 具体看代码(冗长): #include <iostream> #include <cstdio ...

  8. HDU 2089 不要62 (数学)

    题目链接 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了 ...

  9. python3 json、logging、sys模块

    json模块 import json dic = {'name':'egon','age':32} # ------------------------------>序列化 f = open(' ...

  10. Dancing Links [Kuangbin带你飞] 模版及题解

    学习资料: http://www.cnblogs.com/grenet/p/3145800.html http://blog.csdn.net/mu399/article/details/762786 ...