二分图匹配——BZOJ1191/Luogu2319 [HNOI2006]超级英雄
来源:互联网 发布:淘宝卖蚕丝被 编辑:程序博客网 时间:2024/06/05 21:09
题面:BZOJ1191 Luogu2319
Hungary匹配算法
思路同“[SCOI2010]连续攻击游戏”详见传送门
然后呢就是建边不一样一点,其他都差不多是一样的
注意到Luogu因为有SPJ,所以要求输出方案
其实很简单啊,就是在DFS时候记录的匹配对象就是啦~
把这个输出就好了
#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>#include<cstdlib>#include<climits>#include<string>#include<queue>using namespace std;int n,m,vis[20001],pp[20001];int nedge=0,p[40001],nex[40001],head[40001];inline void addedge(int a,int b){ p[++nedge]=b;nex[nedge]=head[a];head[a]=nedge;}bool dfs(int x,int y){ for(int k=head[x];k;k=nex[k])if(vis[p[k]]!=y){ vis[p[k]]=y; if(!pp[p[k]]||dfs(pp[p[k]],y)){ pp[x]=p[k]; pp[p[k]]=x; return 1; } } return 0;}inline void hungary(){ int ans=0; for(int i=1;i<=n+1;i++)if(dfs(i,i))ans++; else break; printf("%d\n",ans); for(int i=1;i<=ans;i++)printf("%d\n",pp[i]-10001);//洛谷SPJ要求输出方案BZOJ这句话不用}int main(){ scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ int x,y;scanf("%d%d",&x,&y); addedge(i+1,x+10001);addedge(i+1,y+10001); addedge(x+10001,i+1);addedge(y+10001,i+1); } hungary(); return 0;}
阅读全文
1 0
- 二分图匹配——BZOJ1191/Luogu2319 [HNOI2006]超级英雄
- [BZOJ1191][HNOI2006][二分图匹配][匈牙利算法]超级英雄hero
- 【bzoj1191】 HNOI2006超级英雄Hero 二分图匹配
- 【BZOJ1191】[HNOI2006]超级英雄Hero【二分图匹配】
- 【bzoj1191】【HNOI2006】【超级英雄】【Hero】【二分图匹配】
- [HNOI2006][BZOJ1191][二分图匹配]超级英雄HERO
- [BZOJ1191][HNOI2006]超级英雄Hero(二分图匹配)
- BZOJ1191(HNOI2006)[超级英雄Hero]--二分图最大匹配
- bzoj1191: [HNOI2006]超级英雄Hero(二分图匹配)
- bzoj1191 [HNOI2006]超级英雄Hero(二分图最大匹配)
- bzoj1191: [HNOI2006]超级英雄Hero 裸二分匹配
- 【bzoj1191】 HNOI2006—超级英雄Hero
- 【bzoj1191】【NHOI2006】【超级英雄】【二分图匹配】
- [bzoj1191][二分图匹配]超级英雄Hero
- bzoj1191 超级英雄Hero[二分图匹配]
- [Bzoj1191][HNOI2006]超级英雄Hero
- bzoj1191: [HNOI2006]超级英雄Hero
- [BZOJ1191][HNOI2006]超级英雄Hero
- SAP HANA LEFT/RIGHT字符串截取
- tf.convert_to_tensor的用法
- Java面向对象 (接口)
- java 后台Jsonp处理方法
- class文件结构
- 二分图匹配——BZOJ1191/Luogu2319 [HNOI2006]超级英雄
- golang日記
- C 语言读书笔记集合(乱序版)
- 1.Java的I/O演进之路
- Visual Studio 连接SQL Server数据库
- C++类模板
- ECNU Problem #3247 铁路修复计划(MST + 二分)
- Java知识
- 实习第一天:mybites的学习笔记(纯手打)