题意:

给定一个n(n<=50)的无向图,问最小删去几个点,可以使得这个图不连通

解法:  

1.  基本概念

(1)一个具有 N 个顶点的图,在去掉任意 K-1 个顶点后 (1<=K<=N) 所得的子图仍连通,而去掉 K 个顶点后的图不连通则称 G 是连通的, 那么K 称作图 G 的点连通度

(2)相应地如果至少去掉 K 条边使这个图不连通,则 K 成为图的边连通度

2.  求解思路

  • 对于求解边联通度的问题,为每条边赋权值为1,然后求确定一点作为源点,枚举此点外的每个点作为汇点求最大流。
  • 点联通度问题可以转换到边联通度问题上来,具体转换方法如下
    • 若 G 为无向图,假设有n个点:

      (1) 原 G 图中的每个顶点 v 变成两个顶点 v' 和 v+n ,顶点 v 至 v+n 有一条弧(有向边)连接,弧容量为 1;

      (2) 原 G 图中的每条边  e = uv ,连一条 u+n 到 v 的弧,再连一条 v+n 到 u 的弧,容量均为INF

      (3) A” 为源顶点, B' 为汇顶点

      注意:弧是有向边

    • 若 G 为有向图,假设有n个点:

      (1) 原 G 图中的每个顶点 v 变成两个顶点 v' 和 v+n ,顶点 v 至 v+n 有一条弧(有向边)连接,弧容量为 1;

      (2) 原 G 图中的每条弧  e = uv 变成一条有向轨 u'u"v'v" ,其中轨上的弧 u"v' 的容量为 ∞;

      (3) A” 为源顶点, B' 为汇顶点

  • 指定一个源点 A" ,枚举汇点B',求 A" 到 B' 的最大流 F
  1. #include<bits/stdc++.h>
  2. #define REP(i, a, b) for(int i = (a); i < (b); i++)
  3. #define MEM(a,x) memset(a,x,sizeof(a))
  4. #define INF 0x3f3f3f3f
  5. #define MAXN 300+10
  6. using namespace std;
  7. struct Edge {
  8. int from, to, cap, flow;
  9. };
  10. struct Dinic {
  11. int n, m, s, t;
  12. vector<Edge>edges;
  13. vector<int>G[MAXN];
  14. bool vis[MAXN];
  15. int d[MAXN];
  16. int cur[MAXN];
  17. void init() {
  18. for (int i = ; i < MAXN; i++) G[i].clear();
  19. edges.clear();
  20. memset(d, , sizeof(d));
  21. }
  22. void AddEdge(int from, int to, int cap) {
  23. edges.push_back({ from, to, cap, });
  24. edges.push_back({ to, from, , });
  25. m = edges.size();
  26. G[from].push_back(m - );
  27. G[to].push_back(m - );
  28. }
  29. bool BFS() {
  30. int x, i;
  31. memset(vis, , sizeof(vis));
  32. queue<int>Q;
  33. Q.push(s);
  34. d[s] = ;
  35. vis[s] = ;
  36. while (!Q.empty()) {
  37. x = Q.front(), Q.pop();
  38. for (i = ; i < G[x].size(); i++) {
  39. Edge & e = edges[G[x][i]];
  40. if (!vis[e.to] && e.cap > e.flow) {
  41. vis[e.to] = ;
  42. d[e.to] = d[x] + ;
  43. Q.push(e.to);
  44. }
  45. }
  46. }
  47. return vis[t];
  48. }
  49. int DFS(int x, int a) {
  50. if (x == t || a == )
  51. return a;
  52. int flow = , f;
  53. for (int &i = cur[x]; i < G[x].size(); i++) {
  54. Edge & e = edges[G[x][i]];
  55. if (d[x] + == d[e.to] && (f = DFS(e.to, min(a, e.cap - e.flow))) > ) {
  56. e.flow += f;
  57. edges[G[x][i] ^ ].flow -= f;
  58. flow += f;
  59. a -= f;
  60. if (a == )
  61. break;
  62. }
  63. }
  64. return flow;
  65. }
  66. int Maxflow(int s, int t) {
  67. this->s = s, this->t = t;
  68. int flow = ;
  69. while (BFS()) {
  70. memset(cur, , sizeof(cur));
  71. flow += DFS(s, INF);
  72. }
  73. return flow;
  74. }
  75. }Men;
  76. int c[][];
  77. int main() {
  78. int n, m;
  79. while (scanf("%d%d", &n, &m) != EOF) {
  80. if (n == ) { puts(""); continue; }
  81. else if (n == ) { puts(""); continue; }
  82. else if (m == ) { puts(""); continue; }
  83. Men.init();
  84. int u, v, uu, vv;
  85. MEM(c, );
  86. REP(i, , n) Men.AddEdge(i, i + n, );
  87. REP(i, , m) {
  88. scanf(" (%d,%d)", &u, &v);
  89. uu = u + n; vv = v + n;
  90. Men.AddEdge(uu, v, INF); Men.AddEdge(vv, u, INF);
  91. }
  92. int ans = INF;
  93. vector<Edge>o=Men.edges;
  94. REP(i, , n) {
  95. Men.edges = o;
  96. ans = min(ans, Men.Maxflow(n, i));
  97. }
  98. printf("%d\n", ans == INF ? n: ans);
  99. }
  100. return ;
  101. }

Uva1660 (点联通度、边联通度问题)的更多相关文章

  1. C语言实现二叉树中统计叶子结点的个数&度为1&度为2的结点个数

    算法思想 统计二叉树中叶子结点的个数和度为1.度为2的结点个数,因此可以参照二叉树三种遍历算法(先序.中序.后序)中的任何一种去完成,只需将访问操作具体变为判断是否为叶子结点和度为1.度为2的结点及统 ...

  2. C. Multi-Subject Competition 思维+前缀和+填表加减复杂度(复杂度计算错误)

    题意: 给出n个学生 m类题目 每个人会做s[i]类的题 并且做这个题的能力为r[i]  组成一个竞赛队 要求可以选择一些题目  在竞赛队中 擅长每一个题目的 人数要均等  求max(sigma(r[ ...

  3. 【强联通图 | 强联通分量】HDU 1269 迷宫城堡 【Kosaraju或Tarjan算法】

      为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明 ...

  4. python 度分秒转度

    #必须是u类型==================u==================== by gisoracle def dmstod(dms): #arcpy.AddMessage(" ...

  5. bzoj2200拓扑排序+最短路+联通块

    自己写的不知道哪里wa了,明明和网上的代码差不多.,. /* 给定一张图,有的边是无向边,有的是有向边,有向边不会出现在环中,且有可能是负权值 现在给定起点s,求出s到其余所有点的最短路长度 任何存在 ...

  6. 联通光纤上网配置+华为HG8240光猫+TL-WR842N

    最近搬家改用北京联通宽带,光纤入户的那种.联通送的光猫是华为HG8240,没看到天线,应该是不带无线路由.然后自己再买了个TP-Link的TL-WR842N,用来组局域网,也供ipad.kindle. ...

  7. Open gl 的不规则图形的4联通种子递归填充和扫描线种子递归填充算法实现

    实验题目:不规则区域的填充算法 实验目的:验证不规则区域的填充算法 实验内容:利用VC与OpenGL,实现不规则区域的填充算法. 1.必做:实现简单递归的不规则区域填充算法. 2.选做:针对简单递归算 ...

  8. IOS 特定于设备的开发:检查设备接近度和电池状态

    UIDevice类提供了一些API,使你能够跟踪设备的特征,包括电池的状态和接近度传感器.他们二者都以通知的形式提供更新,可以订阅他们,以便在有重要的更新时通知你的应用程序. 1>启动和禁用接近 ...

  9. SQL Server相似度比较函数

    原文:SQL Server相似度比较函数 相似度函数 概述    最近有人问到关于两个字段求相似度的函数,所以就写了一篇关于相似度的函数,分别是“简单的模糊匹配”,“顺序匹配”,“一对一位置匹配”.在 ...

  10. R语言︱SNA-社会关系网络—igraph包(中心度、中心势)(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SNA社会关系网络分析中,关键的就是通过一些指 ...

随机推荐

  1. [实用分享]Kindle电子书格式AZW3转换为MOBI

    [实用分享]Kindle电子书格式AZW3转换为MOBI 思路:先拆解成源文件再转换成 MOBI 推荐首选这种方法.此方法的思路是,首先用 KindleUnpack 把 azw3 文件拆解成源文件,然 ...

  2. python 更改pip源

    用pip安装依赖包时默认访问https://pypi.Python.org/simple/,但是经常出现不稳定以及访问速度非常慢的情况,国内厂商提供的pipy镜像目前可用的有: http://pypi ...

  3. Codeforces_799

    A.求两个时间比较一下. #include<bits/stdc++.h> using namespace std; int n,t,k,d; int main() { ios::sync_ ...

  4. Codeforces_490_E

    http://codeforces.com/problemset/problem/490/E dfs,过程要注意细节,特别是当前位置取了与上个数当前位置相同是,若后面不符合条件,则当前位置要重置'?' ...

  5. StackExchange.Redis 之 hash 类型示例

    StackExchange.Redis 的组件封装示例网上有很多,自行百度搜索即可. 这里只演示如何使用Hash类型操作数据: // 在 hash 中存入或修改一个值 并设置order_hashkey ...

  6. mybatis缓存问题导致无法查询到数据

    今天查询记录时,发现重复查询结果时出现空记录的情况 查看控制台信息,只有红色框选部分有进行查询数据,而其他没有.然而上图可看出有两条数据是能展现出来的,故有可能是mybatis缓存命中的. 因此在ma ...

  7. Burpsuite Pro 2020.1最新破解版

    简介 Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP ...

  8. Vue简介与基础

    一.什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于 ...

  9. CentOS7.3下yum安装MariaDB10.3.12并指定utf8字符集

    添加MariaDB的yum源,指定安装的版本,然后使用 yum 工具进行安装 参考MariaDB官方网站对应安装方法和步骤 https://downloads.mariadb.org/mariadb/ ...

  10. C语言RH850 F1KM serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天我要介绍的RH85 ...