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个“ ...
随机推荐
- 夺命雷公狗jquery---1选择元素的3种方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- [ThinkPHP]MVC模块和URL访问
## ThinkPHP 3 MVC模式和URL访问#讲师:赵桐正微博:http://weibo.com/zhaotongzheng 本节课大纲: 一.什么是MVC // ...
- crontab 误区
# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | . ...
- 为 Macbook 增加锁屏热键技巧
第一步,找到“系统偏好设置”下的“安全性与隐私”,在“通用”页里勾上“进入睡眠或开始屏幕保护程序后立即要求输入密码”. 第二步,要用快捷键启动屏幕保护程序,相对复杂一点.在“应用程序”里找到“Auto ...
- java总结第二次//数组及面向对象
三.java数组 主要内容:数组概述.一维数组声明.数组元素的引用.数组元素的默认初始化.创建数组.数组初始化.多维数组.多维数组初始化.数组排序 1.数组概述 数组是多个相同类型数据的组合,实现对这 ...
- A4纸网页打印——宽高设置
一.在公制长度单位与屏幕分辨率进行换算时,必须用到一个DPI(Dot Per Inch)指标. 经过我仔细的测试,发现了网页打印中,默认采用的是96dpi,并非传闻的72dpi . A4纸张的尺寸是2 ...
- Java中常见数据结构:list与map
1:集合 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程 ...
- docker stop 与 docker kill的区别
docker stop 与 docker kill 均可以将容器停掉,但二者究竟有什么区别呢?首先,摘录一下官网对这两个功能的描述: docker stop: Stop a running conta ...
- yii2框架安装
注意:先把php.ini里面的php_openssl.dll扩展打开 1.下载yii2框架的文件包yii-advanced-app-2.0.7 2.打开路径为advanced下面的init.bat ...
- 删除ecshop登录后台看到的系统信息
登陆ecshop后台,默认打开在页面顶部会出现个系统信息,显示操作系统,数据库版本,以及安装日期系统版本号.部分客户问到怎么删除,这里最模板提供ecshop教程告诉大家方法. 找到admin\temp ...