二分图--最大匹配
来源:互联网 发布:人脸变老软件电脑版 编辑:程序博客网 时间:2024/04/30 08:44
1918: G
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 359 Solved: 86
SubmitStatusWeb Board
Description
晴天也来寻宝啦,有一个m层的宝塔,只能从第一层开始一层一层的往上走,每层都有一个门,你需要用钥匙来打开门才能继续走,现在晴天有n把钥匙,编号为0-n-1,然后他要开始寻宝了。没有特殊技能怎么好意思出来寻宝呢,他现在有两个天赋技能,他知道第i层的门可以用编号为a和b的钥匙打开(可能a等于b呦),然后他还可以在进入宝塔前把门的顺序任意调换一次,也就是说比如可以把m层原来的1 2 3 ..m,换为 m ...3 2 1.晴天想知道他最多能拿到多少层的宝物。
Input
第一行一个整数t表示有多少组测试实例
每组数据第一行为两个整数n,m分别表示有多少个钥匙,有多少层。
接下来m行,每行两个数字x,y,第i行表示第i层的门可以用标号x或y的钥匙打开。
(n,m<=1000)
Output
输出一个整数表示最多可以上多少层。
Sample Input
13 40 10 10 11 2
Sample Output
3
HINT
在样例中,在进入宝塔前,将门的顺序换为4 1 2 3.然后前三层分别使用2 0 1三把钥匙拿到前三层的宝物
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int map[1010][1010],vis[1010],pei[1010];int t,n,m;bool dfs(int x){for(int i=0;i<n;i++){if(!vis[i]&&map[x][i]==1){vis[i]=1;if(!pei[i]||dfs(pei[i])){pei[i]=x;return true;}}}return false;}int main(){ scanf("%d",&t); while(t--) { int a,b; scanf("%d%d",&n,&m);memset(pei,0,sizeof(pei)); memset(map,0,sizeof(map)); for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); map[i][a]=1; map[i][b]=1; } int ans=0; for(int i=1;i<=m;i++) {memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } printf("%d\n",ans); } return 0; }
0 0
- 二分图最大匹配
- 二分图最大匹配 。
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图 最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图最大匹配
- 二分图 最大匹配
- 二分图最大匹配
- Qt按钮为什么设置了三态点击样式效果,无法得到预期,enabled属性为何无法选中 - C/C++解惑之Qt
- 程序设计语言学习笔记
- 碎碎念_天天更
- MFC控件实例之Slider Control实例
- 【多校】ZZULIOJ 1919 D
- 二分图--最大匹配
- caffe使用draw_net.py网络结构绘制
- Fiddler使用和数据抓包
- 55. Jump Game
- 你们还在为区块链狂热,Gartner已经站出来帮你认清“五大迷思”了
- MySql判断是否为null或空字符串
- Android Studio如何取消与SVN的关联
- Scala和Java的大整数的关系
- 继承与派生,多继承,函数重载,构造函数调用顺序