HDU 1281 棋盘游戏(匈牙利算法 二分最大匹配)
来源:互联网 发布:coc墙升级数据 编辑:程序博客网 时间:2024/04/30 20:30
题意好理解,就最多能放几个车,而重要点的求解,,先求出最大匹配数m,每次去掉一个边(也就是一个关系)然后求最大匹配数k,如果k<m,说明该点是个重要点,因为少了此点最大匹配数不够原来的值了
题目链接:点击打开链接
代码注释:
<strong><span style="font-size:18px;color:#ff6600;">#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 105int a[N][N],visit[N],link[N];int n,m;int dfs(int i){ for(int j=1; j<=m; j++) { if(a[i][j]&&!visit[j]) { visit[j]=1; if(link[j]==-1||dfs(link[j])) { link[j]=i; return 1; } } } return 0;}int hungary(){ int sum=0; memset(link,-1,sizeof(link)); for(int i=1; i<=n; i++) { memset(visit,0,sizeof(visit)); if(dfs(i)) sum++; } return sum;}int main(){ int i,k,t=1; int x[N*N],y[N*N]; while(cin>>n>>m>>k) { memset(a,0,sizeof(a)); for(i=0; i<k; i++) { scanf("%d%d",&x[i],&y[i]); a[x[i]][y[i]]=1; } int sum=hungary(); //前面就是模版hungary求最大匹配数,不懂得看我之前的博客 int ans=0; for(i=0; i<k; i++)//这里就是判断是不是重要点 { a[x[i]][y[i]]=0; int tem=hungary(); if(tem<sum) ans++; a[x[i]][y[i]]=1; } printf("Board %d have %d important blanks for %d chessmen.\n",t++,ans,hungary()); }}</span></strong>
0 0
- HDU 1281 棋盘游戏(匈牙利算法 二分最大匹配)
- HDU ACM 1281 棋盘游戏->二分图最大匹配(匈牙利算法实践)
- HDU-1281 棋盘游戏 二分图匹配匈牙利算法
- hdu 1281 棋盘游戏 二分图匹配 匈牙利算法 暴力
- HDU 1281 棋盘游戏 二分匹配 匈牙利算法
- hdu 1281 棋盘游戏(最大匹配·匈牙利)
- HDU 1281 棋盘游戏(二分图匹配+匈牙利算法+模拟)
- HDU 1281 棋盘游戏(最大二分匹配)
- hdu 1281 棋盘游戏(枚举,二分图最大匹配)
- hdu 1281 棋盘游戏 (二分图最大匹配)
- hdu 1281 棋盘游戏 二分图匹配 匈牙利算法 解题报告
- hdu 1281 棋盘游戏 (二分匹配)
- hdu 1281 棋盘游戏(二分匹配)
- HDU 1281 棋盘游戏(二分匹配)
- hdu 1281 棋盘游戏(最大匹配)
- hdu 1281 棋盘游戏 二分图最大匹配
- HDU 1281 棋盘游戏 (二分图的最大匹配)
- HDU 1281 棋盘游戏 二分图最大匹配 + 枚举
- 背包问题
- 【leetcode】Best Time to Buy and Sell Stock I && II && III
- Java基础加强-java5的泛型
- POJ3373:Changing Digits(记忆化)
- cocos2d-x-3.2alpha0 如何创建新工程
- HDU 1281 棋盘游戏(匈牙利算法 二分最大匹配)
- C#:当选择DataGridView控件中的行时显示不同的颜色
- hdu 4858 项目管理 图分治 (复合算法)
- 我是无能无力了
- c++ primer(第五版)笔记 第一章
- 6天通吃树结构
- poj1481
- POJ 1159 - Palindrome (DP 添加最少字符使s为回文串)
- codeforces 126B Password