题目链接

给一个图, n个点m条边, 求至少去掉多少个点可以使得图不再联通。
随便指定一个点为源点, 枚举其他点为汇点的情况, 跑网络流, 求其中最小的情况。 如果最后ans为inf, 说明是一个完全图, 那么结果就为n。

  1 #include <iostream>
  2 #include <vector>
  3 #include <cstdio>
  4 #include <cstring>
  5 #include <algorithm>
  6 #include <cmath>
  7 #include <map>
  8 #include <set>
  9 #include <string>
 10 #include <queue>
 11 using namespace std;
 12 #define pb(x) push_back(x)
 13 #define ll long long
 14 #define mk(x, y) make_pair(x, y)
 15 #define lson l, m, rt<<1
 16 #define mem(a) memset(a, 0, sizeof(a))
 17 #define rson m+1, r, rt<<1|1
 18 #define mem1(a) memset(a, -1, sizeof(a))
 19 #define mem2(a) memset(a, 0x3f, sizeof(a))
 20 #define rep(i, a, n) for(int i = a; i<n; i++)
 21 #define ull unsigned long long
 22 typedef pair<int, int> pll;
 23 const double PI = acos(-1.0);
 24 const double eps = 1e-8;
 25 const int mod = 1e9+7;
 26 const int inf = 1061109567;
 27 const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
 28 const int maxn = 4e4+5;
 29 int q[maxn*2], head[maxn*2], dis[maxn/10], s, t, num, edge[2500][2];
 30 struct node
 31 {
 32     int to, nextt, c;
 33     node(){}
 34     node(int to, int nextt, int c):to(to), nextt(nextt), c(c){}
 35 }e[maxn*2];
 36 void init() {
 37     num = 0;
 38     mem1(head);
 39 }
 40 void add(int u, int v, int c) {
 41     e[num] = node(v, head[u], c); head[u] = num++;
 42     e[num] = node(u, head[v], 0); head[v] = num++;
 43 }
 44 int bfs() {
 45     mem(dis);
 46     dis[s] = 1;
 47     int st = 0, ed = 0;
 48     q[ed++] = s;
 49     while(st<ed) {
 50         int u = q[st++];
 51         for(int i = head[u]; ~i; i = e[i].nextt) {
 52             int v = e[i].to;
 53             if(!dis[v]&&e[i].c) {
 54                 dis[v] = dis[u]+1;
 55                 if(v == t)
 56                     return 1;
 57                 q[ed++] = v;
 58             }
 59         }
 60     }
 61     return 0;
 62 }
 63 int dfs(int u, int limit) {
 64     if(u == t) {
 65         return limit;
 66     }
 67     int cost = 0;
 68     for(int i = head[u]; ~i; i = e[i].nextt) {
 69         int v = e[i].to;
 70         if(e[i].c&&dis[v] == dis[u]+1) {
 71             int tmp = dfs(v, min(limit-cost, e[i].c));
 72             if(tmp>0) {
 73                 e[i].c -= tmp;
 74                 e[i^1].c += tmp;
 75                 cost += tmp;
 76                 if(cost == limit)
 77                     break;
 78             } else {
 79                 dis[v] = -1;
 80             }
 81         }
 82     }
 83     return cost;
 84 }
 85 int dinic() {
 86     int ans = 0;
 87     while(bfs()) {
 88         ans += dfs(s, inf);
 89     }
 90     return ans;
 91 }
 92 int main()
 93 {
 94     int n, m, x, y;
 95     while(~scanf("%d%d", &n, &m)) {
 96         for(int i = 0; i<m; i++) {
 97             scanf(" (%d,%d)", &edge[i][0], &edge[i][1]);
 98         }
 99         s = n;
100         int ans = inf;
101         for(int i = 1; i<n; i++) {
102             t = i;
103             init();
104             for(int j = 0; j<m; j++) {
105                 int x = edge[j][0];
106                 int y = edge[j][1];
107                 add(x+n, y, inf);
108                 add(y+n, x, inf);
109             }
110             for(int j = 0; j<n; j++)
111                 add(j, j+n, 1);
112             ans = min(ans, dinic());
113         }
114         if(ans == inf)
115             ans = n;
116         cout<<ans<<endl;
117     }
118     return 0;
119 }

转载于:https://www.cnblogs.com/yohaha/p/5060401.html

poj 1966 Cable TV Network 顶点连通度相关推荐

  1. POJ 1966 Cable TV Network (最大流最小割)

    $ POJ~1966~Cable~TV~Network $ $ solution: $ 第一眼可能让人很难下手,但本就是冲着网络流来的,所以我们直接一点.这道题我们要让这个联通图断开,那么势必会有两个 ...

  2. [POJ 1966] Cable TV Network

    [题目链接] http://poj.org/problem?id=1966 [算法] 拆点 + 最小割 [代码] #include <algorithm> #include <bit ...

  3. POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】

    题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...

  4. POJ - 1966 Cable TV Network(最小割-最大流)

    题目链接:点击查看 题目大意:给定一张无向图,求最少去掉多少个点,可以使图不连通 题目分析:让图不连通,也就是让图分成两个部分,这样题目就转换成了最小割的问题了,不过最小割问题是要求最小割边,所以我们 ...

  5. poj 1966 Cable TV Network

    求删除最少的点使得图不联通 将每一个点拆分为i,i',连接i,i'为1,若原图中存在g[u][v] = 1,连接u'到v,容量为INF,连接u,u'为1,连接v,v'为1 枚举源点和汇点,求出最小的最 ...

  6. Cable TV Network POJ - 1966 最大流最小割定理 点边转化

    最大流最小割定理 任何一个网络的最大流量等于最小割中边的容量之和 即最大流等于最小割 点边转化 节点可以拆为入点和出点 把点的属性添加到入点和出点之间的边上 图的边也可以分两截 在中间加一个节点 把边 ...

  7. POJ1966 Cable TV Network

    一.原题链接:http://poj.org/problem?id=1966 二.题目大意:给你一个很裸的网络,让你判断最少去掉多少个点能够使其不连通.注意是无向图. 三.思路:枚举每个源点和汇点,求每 ...

  8. UVA1660 电视网络 Cable TV Network(网络流,最小割)

    题目链接 题意翻译 电视电缆网络的继电器之间的连接是双向的.如果任意两个继电器之间都连通,那么这个网络就是连通的,否则不连通.特别地,一个空网络或只有一个继电器的网络是连通的. 定义一个有n个继电器的 ...

  9. POJ 1966 枚举 + Dinic

    题意 传送门 POJ 1966 Cable TV Network 题解 若无向图不连通,则图中至少存在两个点不连通,则可以枚举这两个点.若两个不同的点 s , t s,t s,t 因为删去某个点集而不 ...

最新文章

  1. python课程与c+课程有什么不同-C和Python我该先学什么?
  2. pmbook 知识领域 第六版_PMP项目管理10大知识领域脑图
  3. Fiddler 从安装到使用 (creation of the root certificate wasn)
  4. 题解【bzoj4653 [NOI2016] 区间】
  5. dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人
  6. React开发(116):ant design search引入
  7. 作者:张国惠(1978-),男,美国新墨西哥大学土木工程系助理教授、博士生导师。...
  8. centos系统中,相同的shell命令,直接在命令行中可以执行,在.sh文件中运行不了的原因
  9. Selenium UI自动化测试(一)环境配置
  10. 汽车维保反欺诈系统的设计和算法应用
  11. 微信Bscroll事件
  12. win7 sp1简体中文升级补丁包(64位)
  13. Gallery3d 学习笔记(6)
  14. 智能暖风机——3.利用B3950实现温度采集功能
  15. 基本逻辑门电路 - 异或
  16. 开放经济中的货币-中国视角下的宏观经济
  17. 数据库常见问题:服务器'SQL SERVER'上的 MSDTC 不可用
  18. 解决 input 输入框在 iOS 系统中无法输入内容
  19. 程序员画图利器——Visio
  20. 数据库的这些你都知道吗?

热门文章

  1. linux 中网卡配置命令 ifconfig简介
  2. [转]Effective C#原则4:用条件属性而不是#if
  3. python高级函数、将函数作为变量、返回函数_从函数外部返回变量名,作为python函数内部的字符串...
  4. java 鼠标拖动_java 让表项支持鼠标拖动移位,并自动滚动滚动条
  5. 城市天际线 android,都市天际线安卓手机版
  6. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考
  7. java 访问网络驱动器_尝试通过GitLab Runner脚本访问网络驱动器但收到错误
  8. 在Linux系统下初始化COM组件,Linux操作系统的引导和初始化.doc
  9. openssh漏洞_技术干货 | OpenSSH命令注入漏洞复现(CVE202015778)
  10. ef 执行mysql语句_在EF中执行SQL语句