链接

题意为去掉多少个顶点使图不连通,求顶点连通度问题。拆点,构造图,对于<u,v>可以变成<u2,v1> <v2,u1>容量为无穷,<u1,u2>容量为1.那么求出来的最大流(即最小割)就为所需要删除的顶点个数,需要字典序输出,从小到大枚举顶点,如果不加入当前点,最小割变小了的话 ,说明这个点是肯定要删除的。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <queue>
  5. #include <algorithm>
  6. using namespace std;
  7. #define INF 0x3f3f3f
  8. const int N = ;
  9. #define M 160015
  10. struct node
  11. {
  12. int u,v,next;
  13. int w;
  14. } edge[M<<];
  15. int head[N],t,vis[N],pp[N],dis[N];
  16. int o[N];
  17. int st,en;
  18. int x[N][N],f[N];
  19. void init()
  20. {
  21. t=;
  22. memset(head,-,sizeof(head));
  23. }
  24. void add(int u,int v,int w)
  25. {
  26. edge[t].u = u;
  27. edge[t].v = v;
  28. edge[t].w = w;
  29. edge[t].next = head[u];
  30. head[u] = t++;
  31. edge[t].u = v;
  32. edge[t].v = u;
  33. edge[t].w = ;
  34. edge[t].next = head[v];
  35. head[v] = t++;
  36. }
  37. int bfs()
  38. {
  39. int i,u;
  40. int w;
  41. memset(dis,-,sizeof(dis));
  42. queue<int>q;
  43. q.push(st);
  44. dis[st] = ;
  45. while(!q.empty())
  46. {
  47. u = q.front();
  48. q.pop();
  49. for(i = head[u] ; i != - ; i = edge[i].next)
  50. {
  51. int v = edge[i].v;
  52. w = edge[i].w;
  53. if(dis[v]<&&w>)
  54. {
  55. dis[v] = dis[u]+;
  56. q.push(v);
  57. }
  58. }
  59. }
  60. if(dis[en]>) return ;
  61. return ;
  62. }
  63. int dfs(int u,int te)
  64. {
  65. int i;
  66. int s;
  67. if(u==en) return te;
  68. for(i = head[u] ; i != - ; i = edge[i].next)
  69. {
  70. int v = edge[i].v;
  71. int w = edge[i].w;
  72. if(w>&&dis[v]==dis[u]+&&(s=dfs(v,min(te,w))))
  73. {
  74. edge[i].w-=s;
  75. edge[i^].w+=s;
  76. return s;
  77. }
  78. }
  79. dis[u] = -;
  80. return ;
  81. }
  82. int dinic()
  83. {
  84. int flow = ;
  85. int res;
  86. while(bfs())
  87. {
  88. while(res = dfs(st,INF))
  89. flow+=res;
  90. }
  91. return flow;
  92. }
  93. int main()
  94. {
  95. int n,i,j;
  96. while(scanf("%d%d%d",&n,&st,&en)!=EOF)
  97. {
  98. init();
  99. // memset(x,0,sizeof(x));
  100. memset(f,,sizeof(f));
  101. st+=n;
  102. for(i = ; i <= n ; i++)
  103. {
  104. for(j = ; j <= n; j++)
  105. {
  106. scanf("%d",&x[i][j]);
  107. if(i==j)
  108. {
  109. add(i,i+n,);
  110. }
  111. else if(x[i][j])
  112. {
  113. add(i+n,j,INF);
  114. }
  115. }
  116. }
  117. if(x[st-n][en])
  118. {
  119. puts("NO ANSWER!");
  120. continue;
  121. }
  122. int ans = dinic();
  123. int cnt = ;
  124. for(i = ; i <= n ; i++)
  125. {
  126. if(ans==) break;
  127. if(i==st-n||i==en) continue;
  128. f[i] = ;
  129. init();
  130. for(j = ; j <= n ; j++)
  131. {
  132. if(f[j]) continue;
  133. for(int e = ; e <= n ; e++)
  134. {
  135. if(f[e]) continue;
  136. if(j==e)
  137. add(j,j+n,);
  138. else if(x[j][e])
  139. {
  140. add(j+n,e,INF);
  141. }
  142. }
  143. }
  144. int ts = dinic();
  145. if(ts<ans)
  146. {
  147. cnt++;
  148. ans = ts;
  149. }
  150. else f[i] = ;
  151. }
  152. cout<<cnt<<endl;
  153. for(j = ; j <= n; j++)
  154. if(f[j])
  155. printf("%d ",j);
  156. printf("\n");
  157. }
  158. return ;
  159. }

poj1815Friendship(最小割求割边)的更多相关文章

  1. poj 3204(最小割--关键割边)

    Ikki's Story I - Road Reconstruction Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 7 ...

  2. HDU 3251 Being a Hero(最小割+输出割边)

    Problem DescriptionYou are the hero who saved your country. As promised, the king will give you some ...

  3. HDU3987(最小割最少割边)

    Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/ ...

  4. hdu3987,最小割时求最少割边数

    题意:求最小割时候割边最少的数量.算法:先求dinic一遍,跑出残网络,再把该网络中满流量(残量为0)的边 残量改为1,其他边残量改为无穷,则再跑一次最大流,所得即为答案.(思,最小割有喝多组,但是要 ...

  5. HDU - 6214:Smallest Minimum Cut(最小割边最小割)

    Consider a network G=(V,E) G=(V,E) with source s s and sink t t . An s-t cut is a partition of nodes ...

  6. 【HDU4859】 海岸线(网络流-最小割)

    Problem Description 欢迎来到珠海! 由于土地资源越来越紧张,使得许多海滨城市都只能依靠填海来扩展市区以求发展.作为Z市的决策人,在仔细观察了Z市地图之后,你准备通过填充某些海域来扩 ...

  7. 最小割&网络流应用

    重要链接 基础部分链接 : 二分图 & 网络流初步 zzz大佬博客链接 : 网络流学习笔记 重点内容:最小割二元关系新解(lyd's ppt) 题目:网络流相关题目 lyd神犇课件链接 : 网 ...

  8. ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)

    题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...

  9. HDU 4859(Bestcoder #1 1003)海岸线(网络流之最小割)

    题目地址:HDU4859 做了做杭电多校,知识点会的太少了.还是将重点放在刷专题补知识点上吧,明年的多校才是重点. 这题题目求的最长周长.能够试想一下,这里的海岸线一定是在"."和 ...

随机推荐

  1. BZOJ2327: [HNOI2011]勾股定理

    BZOJ2327: [HNOI2011]勾股定理 Description 题解Here! 这是一道神题... 我一开始把题目看错了,我以为是在$n$根木棒中选两个$i,j$满足$gcd(i,j)==1 ...

  2. swing _JFileChooser文件选择窗口

    import javax.swing.JFileChooser; import org.eclipse.swt.internal.win32.TCHITTESTINFO; public class t ...

  3. java java.io.IOException: No locks available异常处理解决

    try {    randomAccessFile = new RandomAccessFile(file, "rw");    lock = randomAccessFile.g ...

  4. JVM垃圾回收算法 及 垃圾收集器

    摘自<深入理解Java虚拟机> 一.什么是: GC算法是 方法论,那么垃圾收集器就是具体的 实现. 二.四种 垃圾回收算法 1.标记-清除算法:最基础的收集算法:不足有两点:1标记和清除两 ...

  5. Android驱动开发之earlysuspend睡眠模式--实现代码【转】

    本文转载自:http://blog.csdn.net/MyArrow/article/details/8136018 (1)添加头文件: #include <linux/earlysuspend ...

  6. POJ3087 Shuffle'm Up —— 打表找规律 / map判重

    题目链接:http://poj.org/problem?id=3087 Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  7. 构造方法,重载,static,math类(java基础知识七)

    1.构造方法概述和格式 * A:构造方法概述和作用     * 给对象的数据(属性)进行初始化 * B:构造方法格式特点     * a:方法名与类名相同(大小也要与类名一致)     * b:没有返 ...

  8. [原创]JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  9. nyoj--86--找球号(一)(hash&&set&&二分)

    找球号(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=10 ...

  10. RPi 2B DDNS 动态域名

    /**************************************************************************** * RPi 2B DDNS 动态域名 * 说 ...