连通度(定点联通度&&边联通度)
来源:互联网 发布:淘宝德国代购有假货吗 编辑:程序博客网 时间:2024/05/01 20:12
无论是点、边的联通度都是用网络流的方法求解,验证了我的那句话,万物皆网络流
点联通度
用网络流求解 拆点 原网络的点拆成 i i+n <i,i+n>流量1 其他所有边都为oo
Poj 1966
#include<iostream>#include<math.h>#include<algorithm>#include<string.h>#include<stdio.h>using namespace std;#define oo 0x3f3f3f3f#define maxn 108#define maxm 40000struct Edge{int v, f, c, next;}E[maxm];int head[maxn], h[maxn];int stack[maxm];int q[maxn], front, rear, tol;int level[maxn];int n, m;struct Edge2{int u, v;}edge[maxn];bool BFS(int s, int t){memset(level, 0, sizeof level);level[s] = 1;front = rear = 0;q[rear++] = s;while (front < rear){int u = q[front++];if (u == t)return true;for (int i = head[u]; i != -1; i = E[i].next){int v = E[i].v;if (!level[v] && E[i].f>0){level[v] = level[u] + 1;q[rear++] = v;}}}return false;}int Dinic(int s, int t){int maxflow = 0;while (BFS(s, t)){memcpy(h, head, sizeof h);int u = s;int top = 0;while (true){if (u == t){int minflow = oo, flag = 0;for (int i = 0; i < top; i++){if (E[stack[i]].f<minflow){minflow = E[stack[i]].f;flag = i;}}for (int i = 0; i < top; i++){E[stack[i]].f -= minflow;E[stack[i] ^ 1].f += minflow;}top = flag;maxflow += minflow;u = E[stack[top] ^ 1].v;}for (int i = h[u]; i != -1; i = h[u] = E[i].next){int v = E[i].v;if (level[v] == level[u] + 1 && E[i].f){break;}}if (h[u] != -1){stack[top++] = h[u];u = E[h[u]].v;}else{if (top == 0)break;level[u] = 0;u = E[stack[--top] ^ 1].v;}}}return maxflow;}void add_edge(int u, int v, int f){E[tol].v = v;E[tol].f = f;E[tol].c = f;E[tol].next = head[u];head[u] = tol++;E[tol].v = u;E[tol].f = 0;E[tol].c = 0;E[tol].next = head[v];head[v] = tol++;}void Init(){memset(head, -1, sizeof head);tol = 0;}void Build(){Init();for (int i = 0; i < n; i++)add_edge(i, i + n, 1);for (int i = 1; i <= m; i++){int u = edge[i].u;int v = edge[i].v;add_edge(u + n, v, oo);add_edge(v + n, u, oo);}}/*void Back(){for (int i = 0; i < tol; i++)E[i].f = E[i].c;}*/int main(){while (scanf("%d%d", &n, &m) != EOF){for (int i = 1; i <= m; i++){while (getchar() != '(');scanf("%d,%d)", &edge[i].u, &edge[i].v);}int ans = oo;for (int i = 1; i < n; i++){Build();ans = min(ans, Dinic(n,i));//Back();}if (ans >= oo)ans = n;printf("%d\n", ans);}return 0;}
0 0
- 连通度(定点联通度&&边联通度)
- 联通
- poj 3084 zoj2788 边联通度,最大流
- 有向连通图增加多少边构成强联通(hdu3836)
- 双联通分量---点双联通,边双联通 (模板)
- poj 1966 Cable TV Network 点联通度
- POJ2186 Popular Cows 强联通求出度为零
- zoj 1311 poj 1144 Network(无向图顶点联通度)
- poj1896—Cable TV Network(点联通度的求解)
- loj 1300( 边双联通 + 判奇圈 )
- 边双联通分量
- 边双联通分量
- 边双联通模板
- 边双联通分量
- 无向连通图至少增加多少边形成双联通
- 无向连通图求割点(tarjan算法去掉改割点剩下的联通分量数目)
- UVALive5796点双联通分量or边双联通分量
- 点双联通分量和边双联通分量小结
- 在MAC应用里显示多个图片(IKImageBrowserView控件使用)(二)
- java中的正则学习
- 实现Fragment数据的缓加载,即滑动到当前页再加载数据
- FFMPEG学习路线
- python27中mimetypes.py的UnicodeDecodeError
- 连通度(定点联通度&&边联通度)
- ActiveReports 9 新功能:创新的报表分层设计理念
- IOS开发之酷酷爱魔兽
- 宇宙中最强大的开发环境免费了!Visual Studio 免费
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] – format丶
- unresolved external symbol _WinMain@16的解决方法
- IOS中获取各个文件的目录路径的方法和NSFileManager类
- unity3d 中进行安卓版本的发布
- 过滤器应用之解决全站乱码