hdu1281最大匹配
来源:互联网 发布:成都数据分析咨询公司 编辑:程序博客网 时间:2024/06/06 01:17
/*题意:要求放车的数目尽量多。 但是一行一列只能有一个车,所以以横坐标为一个集合,以纵坐标为另外一个集合,以输入放车的点,连边建好图。一行一列只有一个车,正好对应二分图的匹配,一一对应,尽量多,则是求最大的匹配。然后中要点指的是删除某个车,使得最大匹配变小,也就是删除某条边,能改变最大匹配。则这就是一个重要的点。*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<vector>using namespace std;#define MAX 101int n,m,k;int map[MAX][MAX];int vis[MAX];int match[MAX];int find(int x){ for(int i=1;i<=m;i++) { if(map[x][i]!=0) { if(!vis[i]) { vis[i]=1; if(match[i]==-1||find(match[i])) { match[i]=x; return 1; } } } } return 0;}int main(){ int ca=1; while(scanf("%d %d %d",&n,&m,&k)!=EOF) { memset(map,0,sizeof(map)); for(int i=1;i<=k;i++) { int x,y; scanf("%d %d",&x,&y); map[x][y]=1; } int count=0; memset(match,-1,sizeof(match)); for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(find(i)) count++; } int count1=0,count2; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(map[i][j]!=0) { map[i][j]=0;count2=0; memset(match,-1,sizeof(match)); for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(find(i)) count2++; } map[i][j]=1; if(count2!=count) count1++; } } } printf("Board %d have %d important blanks for %d chessmen.\n",ca++,count1,count); }}
阅读全文
1 0
- hdu1281最大匹配
- hdu1281 棋盘游戏 (最大匹配)
- HDU1281(最大二分匹配+枚举)
- hdu1281 棋盘游戏 --- 最大匹配
- hdu1281 棋盘游戏(最大匹配)
- hdu1281 棋盘游戏(最大匹配)
- 二分图最大匹配 (hdu1281、1528)
- HDU1281棋盘游戏 二分图最大匹配
- 【HDU1281】【最大匹配】【取点枚举】
- HDU1281(二分图最大匹配)
- hdu1281 棋盘游戏--最大匹配数
- HDU1281棋盘游戏-最大二分匹配
- HDU1281 【最大二分图匹配+关键路径】
- hdu1281 棋盘游戏(枚举 + 二分图最大匹配)
- 二分图最大匹配(HDU1281:棋盘游戏)
- hdu1281 棋盘游戏 二分图最大匹配 枚举
- hdu1281(完美匹配)
- hdu1281 二分匹配
- [YTU](1661) Fibonacci Again --模运算
- 剑指offer-数组中的逆序对
- 51nod 1244 莫比乌斯函数之和
- js变量提升 和函数提升
- (CSU
- hdu1281最大匹配
- ajax get请求获取不到更新的数据
- 【Java编程】以树状结构输出目录
- listen()
- JS&jQuery初级05
- (4)2017.8.4-java基础语法和控制流程(中)
- fluent nhibernate映射的数值类型问题
- SpringBoot-创建RESTful风格的 http接口访问jpa 来操作数据库
- spingMVC网页报“400”错误原因