poj1815Friendship(最小割求割边)
题意为去掉多少个顶点使图不连通,求顶点连通度问题。拆点,构造图,对于<u,v>可以变成<u2,v1> <v2,u1>容量为无穷,<u1,u2>容量为1.那么求出来的最大流(即最小割)就为所需要删除的顶点个数,需要字典序输出,从小到大枚举顶点,如果不加入当前点,最小割变小了的话 ,说明这个点是肯定要删除的。
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- #include <algorithm>
- using namespace std;
- #define INF 0x3f3f3f
- const int N = ;
- #define M 160015
- struct node
- {
- int u,v,next;
- int w;
- } edge[M<<];
- int head[N],t,vis[N],pp[N],dis[N];
- int o[N];
- int st,en;
- int x[N][N],f[N];
- void init()
- {
- t=;
- memset(head,-,sizeof(head));
- }
- void add(int u,int v,int w)
- {
- edge[t].u = u;
- edge[t].v = v;
- edge[t].w = w;
- edge[t].next = head[u];
- head[u] = t++;
- edge[t].u = v;
- edge[t].v = u;
- edge[t].w = ;
- edge[t].next = head[v];
- head[v] = t++;
- }
- int bfs()
- {
- int i,u;
- int w;
- memset(dis,-,sizeof(dis));
- queue<int>q;
- q.push(st);
- dis[st] = ;
- while(!q.empty())
- {
- u = q.front();
- q.pop();
- for(i = head[u] ; i != - ; i = edge[i].next)
- {
- int v = edge[i].v;
- w = edge[i].w;
- if(dis[v]<&&w>)
- {
- dis[v] = dis[u]+;
- q.push(v);
- }
- }
- }
- if(dis[en]>) return ;
- return ;
- }
- int dfs(int u,int te)
- {
- int i;
- int s;
- if(u==en) return te;
- for(i = head[u] ; i != - ; i = edge[i].next)
- {
- int v = edge[i].v;
- int w = edge[i].w;
- if(w>&&dis[v]==dis[u]+&&(s=dfs(v,min(te,w))))
- {
- edge[i].w-=s;
- edge[i^].w+=s;
- return s;
- }
- }
- dis[u] = -;
- return ;
- }
- int dinic()
- {
- int flow = ;
- int res;
- while(bfs())
- {
- while(res = dfs(st,INF))
- flow+=res;
- }
- return flow;
- }
- int main()
- {
- int n,i,j;
- while(scanf("%d%d%d",&n,&st,&en)!=EOF)
- {
- init();
- // memset(x,0,sizeof(x));
- memset(f,,sizeof(f));
- st+=n;
- for(i = ; i <= n ; i++)
- {
- for(j = ; j <= n; j++)
- {
- scanf("%d",&x[i][j]);
- if(i==j)
- {
- add(i,i+n,);
- }
- else if(x[i][j])
- {
- add(i+n,j,INF);
- }
- }
- }
- if(x[st-n][en])
- {
- puts("NO ANSWER!");
- continue;
- }
- int ans = dinic();
- int cnt = ;
- for(i = ; i <= n ; i++)
- {
- if(ans==) break;
- if(i==st-n||i==en) continue;
- f[i] = ;
- init();
- for(j = ; j <= n ; j++)
- {
- if(f[j]) continue;
- for(int e = ; e <= n ; e++)
- {
- if(f[e]) continue;
- if(j==e)
- add(j,j+n,);
- else if(x[j][e])
- {
- add(j+n,e,INF);
- }
- }
- }
- int ts = dinic();
- if(ts<ans)
- {
- cnt++;
- ans = ts;
- }
- else f[i] = ;
- }
- cout<<cnt<<endl;
- for(j = ; j <= n; j++)
- if(f[j])
- printf("%d ",j);
- printf("\n");
- }
- return ;
- }
poj1815Friendship(最小割求割边)的更多相关文章
- poj 3204(最小割--关键割边)
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
- HDU 3251 Being a Hero(最小割+输出割边)
Problem DescriptionYou are the hero who saved your country. As promised, the king will give you some ...
- HDU3987(最小割最少割边)
Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/ ...
- hdu3987,最小割时求最少割边数
题意:求最小割时候割边最少的数量.算法:先求dinic一遍,跑出残网络,再把该网络中满流量(残量为0)的边 残量改为1,其他边残量改为无穷,则再跑一次最大流,所得即为答案.(思,最小割有喝多组,但是要 ...
- 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 ...
- 【HDU4859】 海岸线(网络流-最小割)
Problem Description 欢迎来到珠海! 由于土地资源越来越紧张,使得许多海滨城市都只能依靠填海来扩展市区以求发展.作为Z市的决策人,在仔细观察了Z市地图之后,你准备通过填充某些海域来扩 ...
- 最小割&网络流应用
重要链接 基础部分链接 : 二分图 & 网络流初步 zzz大佬博客链接 : 网络流学习笔记 重点内容:最小割二元关系新解(lyd's ppt) 题目:网络流相关题目 lyd神犇课件链接 : 网 ...
- ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)
题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...
- HDU 4859(Bestcoder #1 1003)海岸线(网络流之最小割)
题目地址:HDU4859 做了做杭电多校,知识点会的太少了.还是将重点放在刷专题补知识点上吧,明年的多校才是重点. 这题题目求的最长周长.能够试想一下,这里的海岸线一定是在"."和 ...
随机推荐
- BZOJ2327: [HNOI2011]勾股定理
BZOJ2327: [HNOI2011]勾股定理 Description 题解Here! 这是一道神题... 我一开始把题目看错了,我以为是在$n$根木棒中选两个$i,j$满足$gcd(i,j)==1 ...
- swing _JFileChooser文件选择窗口
import javax.swing.JFileChooser; import org.eclipse.swt.internal.win32.TCHITTESTINFO; public class t ...
- java java.io.IOException: No locks available异常处理解决
try { randomAccessFile = new RandomAccessFile(file, "rw"); lock = randomAccessFile.g ...
- JVM垃圾回收算法 及 垃圾收集器
摘自<深入理解Java虚拟机> 一.什么是: GC算法是 方法论,那么垃圾收集器就是具体的 实现. 二.四种 垃圾回收算法 1.标记-清除算法:最基础的收集算法:不足有两点:1标记和清除两 ...
- Android驱动开发之earlysuspend睡眠模式--实现代码【转】
本文转载自:http://blog.csdn.net/MyArrow/article/details/8136018 (1)添加头文件: #include <linux/earlysuspend ...
- POJ3087 Shuffle'm Up —— 打表找规律 / map判重
题目链接:http://poj.org/problem?id=3087 Shuffle'm Up Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- 构造方法,重载,static,math类(java基础知识七)
1.构造方法概述和格式 * A:构造方法概述和作用 * 给对象的数据(属性)进行初始化 * B:构造方法格式特点 * a:方法名与类名相同(大小也要与类名一致) * b:没有返 ...
- [原创]JAVA获取word表格中数据的方案
上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...
- nyoj--86--找球号(一)(hash&&set&&二分)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=10 ...
- RPi 2B DDNS 动态域名
/**************************************************************************** * RPi 2B DDNS 动态域名 * 说 ...