BZOJ 3546 Life of the Party (二分图匹配-最大流)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3546
题意:给定一个二分图。(AB两个集合的点为n,m),边有K个。问去掉哪些点后最大匹配会减少。
思路:首先建图跑最大流。然后从s开始dfs一次,若能跑到B集合中的点x,那么说明x可以匹配A集合中的某点,那么x删掉也无所谓。从t开始dfs一次,类似,到达s中的y,那么y删掉也无所谓。
const int INF=1000000005; const int N=20005; struct node { int v,next,cap; }; node edges[N*20]; int head[N],e; int curedge[N]; inline void add(int u,int v,int cap) { edges[e].v=v; edges[e].cap=cap; edges[e].next=head[u]; head[u]=e++; } inline void Add(int u,int v,i64 cap) { add(u,v,cap); add(v,u,0); } int dis[N]; int Q[N]; int bfs(int s,int t) { clr(dis,-1); int i; for(i=s;i<=t;i++) curedge[i]=head[i]; int L=0,R=0; dis[s]=0; Q[R++]=s; while(L<R) { int u=Q[L++]; for(i=head[u];i!=-1;i=edges[i].next) { if(edges[i].cap&&-1==dis[edges[i].v]) { dis[edges[i].v]=dis[u]+1; Q[R++]=edges[i].v; if(edges[i].v==t) return 1; } } } return 0; } int DFS(int u,int det,int t) { if(u==t) return det; int now=0; int i; for(int &i=curedge[u];i!=-1&&det;i=edges[i].next) { int v=edges[i].v; int w=edges[i].cap; if(w&&dis[u]+1==dis[v]) { int tmp=DFS(v,min(w,det),t); if(tmp==0) continue; edges[i].cap-=tmp; edges[i^1].cap+=tmp; now+=tmp; det-=tmp; } } return now; } int dinic(int s,int t) { int ans=0; while(bfs(s,t)) ans+=DFS(s,INF,t); return ans; } int n,m,K; int visit[N][2]; int f[N]; int SS,TT; void dfs(int u,int c) { visit[u][c]=1; if(c==0&&u<=n||c==1&&u>n) f[u]=1; else f[u]=0; int i; for(i=head[u];i!=-1;i=edges[i].next) { int v=edges[i].v; if(edges[i^c].cap>0&&!visit[v][c]&&v!=SS&&v!=TT) { dfs(v,c); } } } int main() { n=getInt(); m=getInt(); K=getInt(); clr(head,-1); int s=0,t=n+m+1; int i; for(i=1;i<=n;i++) Add(s,i,1); for(i=1;i<=m;i++) Add(i+n,t,1); for(i=1;i<=K;i++) { int x=getInt(); int y=getInt(); Add(x,y+n,1); } dinic(s,t); SS=s; TT=t; dfs(s,0); dfs(t,1); for(i=1;i<=n;i++) if(!f[i]) printf("%d\n",i); for(i=1;i<=m;i++) if(!f[i+n]) printf("%d\n",i); }
BZOJ 3546 Life of the Party (二分图匹配-最大流)的更多相关文章
- BZOJ 1059 [ZJOI2007]矩阵游戏:二分图匹配
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 题意: 给你一个n*n的01矩阵. 你可以任意次地交换某两行或某两列. 问你是否可以 ...
- BZOJ:[JSOI2009]游戏Game【二分图匹配乱搞】
题目大意:n*m的棋盘,其中有些区域是禁区,两个人在棋盘上进行博弈,后手选择棋子的初始位置,然后先后手轮流将棋子往上下左右移动,走过的区域不能再走,问能否有一个位置使得后手必胜 Input 输入数据首 ...
- bzoj 1191 [ HNOI 2006 ] 超级英雄Hero —— 二分图匹配
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1191 就是二分图匹配的裸题: 注意题目要求是第一次匹配失败就退出!没仔细看题差点丢失1A. ...
- BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6263 Solved: 2799[Submit][ ...
- BZOJ 1143 [CTSC2008]祭祀river(二分图匹配)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1143 [题目大意] 给出一张有向图,问最大不连通点集,连通具有传递性 [题解] 我们将 ...
- cogs_14_搭配飞行员_(二分图匹配+最大流,网络流24题#01)
描述 http://cojs.tk/cogs/problem/problem.php?pid=14 有一些正飞行员和副飞行员,给出每个正飞行员可以和哪些副飞行员一起飞.一架飞机上必须一正一副,求最多多 ...
- 最短路&生成树&二分图匹配&费用流问题
最短路 题意理解,建图 https://vjudge.net/problem/UVALive-4128 飞机票+行程建图 https://vjudge.net/problem/UVALive-3561 ...
- HDU3081:Marriage Match II (Floyd/并查集+二分图匹配/最大流(+二分))
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 题意: 有m道题,每答对一题才能接着回答下一个问题. 你一道题都不会,但是你有n个“ ...
随机推荐
- 2. 星际争霸之php面向对象(二)
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 用VS2010编C#程序扫盲
0. Properties文件夹 定义你程序集的属性 项目属性文件夹 一般只有一个 AssemblyInfo.cs 类文件,用于保存程序集的信息,如名称,版本等,这些信息一般与项目属性面板中的数据对应 ...
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- Bonbo Git Server
Install This page covers simple Bonobo Git Server installation. Be sure to check prerequisites page ...
- android 百度地图定位开发1
首先注册成为百度开发者 然后进入百度开发者中心 点击LBS 跳到下一个页面 点击Android 开发 里面的基础地图 进入 点击获取密钥 进入 点击创建应用 进入 应用名称自己填 应用类 ...
- tcp socket
1.TCP连接手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在"无差别&quo ...
- SEO之链接农场、内容农场、微信内容农场
SEO之链接农场.内容农场.微信内容农场 一.“内容农场”的上市之路http://www.neweekly.com.cn/newsview.php?id=3330里斯2006年的第二次创业仍旧延续了上 ...
- Linux之sed命令详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- webapi获取请求地址的IP
References required: HttpContextWrapper - System.Web.dll RemoteEndpointMessageProperty - System.Serv ...
- ecshop发票不能使用出现flow.php on line 723等报错
最模板给客户ecshop网站做编码转换出现个问题,网站在点结算页面出现Warning: Invalid argument supplied for foreach flow.php on line 7 ...