题目大意:给出一个无向图,要求删除尽量少的点,使给定的2点间不再连通,并输出字典序最小的方案
题型:图论-网络流
此题难点在于建图,后面就是套网络流的模板.
将点看成边,例如第i个点可以看成一条有向边<i*2-1,i*2>,容量为1.
如果j点和i点邻接,那么新建2条容量为无穷大的有向边<i*2,j*2-1>,<j*2,i*2-1>.
然后应用最大流最小割定理,求最大流即为第一问答案.
接着枚举删除每一个点i(即删除有向边),看最大流是否减少1,如果是则该点在最小割中,然后真的把这一点删点.
枚举完每个点之后别忘了将残量网络还原.
至于为什么要这样建图, 一时间说不清楚......

Executing...
Test 1: TEST OK [0.008 secs, 3852 KB]
Test 2: TEST OK [0.014 secs, 3852 KB]
Test 3: TEST OK [0.005 secs, 3852 KB]
Test 4: TEST OK [0.022 secs, 3852 KB]
Test 5: TEST OK [0.011 secs, 3852 KB]
Test 6: TEST OK [0.019 secs, 3852 KB]
Test 7: TEST OK [0.019 secs, 3852 KB]
Test 8: TEST OK [0.014 secs, 3852 KB]
Test 9: TEST OK [0.032 secs, 3852 KB]
Test 10: TEST OK [0.046 secs, 3852 KB]
Test 11: TEST OK [0.068 secs, 3852 KB]

All tests OK.
Your program ('telecow') produced all correct answers! This is your
submission #3 for this problem. Congratulations!

  1. #include <iostream>
  2. #include <cstring>
  3. #include <queue>
  4. #include <stdio.h>
  5. #define msize 210
  6. #define INF 1000000000
  7. using namespace std;
  8.  
  9. int origin[msize][msize]={};
  10. int r[msize][msize]={}; //残留网络,初始为原图
  11. bool visited[msize];
  12. int pre[msize];
  13. int m,nVertex; //n条边,m个顶点
  14.  
  15. bool bfs(int s,int t) //寻找一条从s到t的增广路,若找到,返回true
  16. {
  17. int p;
  18. queue<int> Q;
  19. memset(pre,-,sizeof(pre));
  20. memset(visited,false,sizeof(visited));
  21.  
  22. pre[s]=s;
  23. visited[s]=true;
  24. Q.push(s);
  25.  
  26. while (!Q.empty())
  27. {
  28. p=Q.front(),Q.pop();
  29. for (int i=; i<=nVertex; i++)
  30. {
  31. if (r[p][i]>&&!visited[i])
  32. {
  33. pre[i]=p;
  34. visited[i]=true;
  35. if (i==t) return true;
  36. Q.push(i);
  37. }
  38. }
  39. }
  40.  
  41. return false;
  42. }
  43.  
  44. int maxFlow(int s,int t)
  45. {
  46. int flow=,d;
  47.  
  48. while (bfs(s,t))
  49. {
  50. d=INF;
  51. for (int i=t; i!=s; i=pre[i]) d=min(d,r[pre[i]][i]);
  52. for (int i=t; i!=s; i=pre[i]) r[pre[i]][i] -= d, r[i][pre[i]] += d;
  53. flow += d;
  54. }
  55. return flow;
  56. }
  57.  
  58. int main()
  59. {
  60. freopen("telecow.in","r",stdin);
  61. freopen("telecow.out","w",stdout);
  62. int s,e,c;
  63.  
  64. cin>>nVertex>>m>>s>>e;
  65. nVertex*=;
  66. for(int i=;i<m;i++)
  67. {
  68. int a,b;
  69. scanf("%d%d",&a,&b);
  70. r[a*-][a*]=;
  71. r[b*-][b*]=;
  72. r[a*][b*-]=INF;
  73. r[b*][a*-]=INF;
  74. }
  75. memcpy(origin,r,sizeof r);
  76. int maxflow=maxFlow(s*,e*-);
  77. int sum=maxflow;
  78. memcpy(r,origin,sizeof r);
  79. printf("%d\n",maxflow);
  80.  
  81. bool first=true;
  82. int cnt=;
  83. for(int i=;i<=nVertex/;i++) // 模拟删掉第i个点
  84. {
  85. if(i==s || i==e)
  86. continue;
  87. if(cnt==sum)
  88. {
  89. break;
  90. }
  91. memcpy(origin,r,sizeof r);
  92. r[i*-][i*]=;
  93.  
  94. if(maxFlow(s*,e*-)+==maxflow)
  95. {
  96. maxflow--;
  97. cnt++;
  98. if(first)
  99. {
  100. first=false;
  101. }
  102. else
  103. {
  104. printf(" ");
  105. }
  106. printf("%d",i);
  107. memcpy(r,origin,sizeof r);
  108. r[i*-][i*]=;
  109. }
  110. else
  111. {
  112. memcpy(r,origin,sizeof r);
  113. }
  114. }
  115. cout<<endl;
  116. return ;
  117. }

USACO5.4-TeleCowmunication的更多相关文章

  1. [Luogu1345][USACO5.4]Telecowmunication 最大流

    题目链接:https://www.luogu.org/problem/show?pid=1345 求最小割点集的大小,直接拆点转化成最小割边.把一个点拆成出点入点,入点向出点连一条容量为1的边,其他的 ...

  2. P1345 [USACO5.4]奶牛的电信Telecowmunication

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  3. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码

    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...

  4. 洛谷——P1345 [USACO5.4]奶牛的电信Telecowmunication

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  5. 题解 P1345 【[USACO5.4]奶牛的电信Telecowmunication】

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  6. AC日记——[USACO5.4]奶牛的电信Telecowmunication 洛谷 P1345

    [USACO5.4]奶牛的电信Telecowmunication 思路: 水题: 代码: #include <cstdio> #include <cstring> #inclu ...

  7. [USACO5.4]奶牛的电信Telecowmunication(网络流)

    P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮 ...

  8. [Luogu P1345] [USACO5.4]奶牛的电信Telecowmunication (最小割)

    题面 传送门:https://www.luogu.org/problemnew/show/P1345 ] Solution 这道题,需要一个小技巧了解决. 我相信很多像我这样接蒟蒻,看到这道题,不禁兴 ...

  9. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  10. [USACO5.4]奶牛的电信Telecowmunication

    裸的最小割,拆点时要考虑清楚到底是怎么连 如果之前i->i+n,之后又x->y+n,显然出不了解 所以可以改为i+n->i 如果要输出方案 考虑每一个一个点,如果删去这个点,最小割变 ...

随机推荐

  1. 一段JAVA签名算法的PHP改写

    源代码是这样的: public class AuthorizationSignature { public static String createSignature(String verb, Str ...

  2. BZOJ 1083 [SCOI2005]繁忙的都市

    1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1664  Solved: 1080[Submit][Sta ...

  3. 往github上传demo

    一直在github上寻找demo,但怎么传demo上githun呢? http://www.2cto.com/kf/201504/390397.html 首先在github上 new一个reposit ...

  4. 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

    原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...

  5. (转载)php数组删除元素各种方法总结

    (转载)http://www.111cn.net/phper/php/46865.htm 有很多朋友都不知道怎么把数组中元素给删除,下面我来总结各种数组删除元素方法给各位,有需要了解的朋友可进入参考. ...

  6. 【扩展欧几里德】Vijos P1009 清帝之惑之康熙

    题目链接: https://vijos.org/p/1009 题目大意: 两个人,一个在坐标x,每天走m,一个在坐标y,每天走n,坐标长L,问几天后碰面. 题目思路: [扩展欧几里德] 根据同余方程的 ...

  7. 数据结构——POJ 1686 Lazy Math Instructor 栈的应用

    Description A math instructor is too lazy to grade a question in the exam papers in which students a ...

  8. bzoj1588 [HNOI2002]营业额统计(Treap)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 11485  Solved: 4062[Submit][Sta ...

  9. eclipse 导入项目时候java版本不一致问题

    最近导入一个java项目,发现我安装的java版本是1.8.0_111,而项目的版本是1.8.0_101,当然不想重新再安装旧的java版本,于是就在网上找了解决方法. 在项目的library中右击, ...

  10. 使用Linux的命令行工具做简单的文本分析

    Basic Text Analysis with Command Line Tools in Linux | William J Turkel 这篇文章非常清楚的介绍了如何使用Linux的命令行工具进 ...