HDU1281 棋盘游戏 最小点覆盖
2017-02-24 21:33
218 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1281题意:
Problem Description小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。
所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么?
Input
输入包含多组数据,
第一行有三个数N、M、K(1< N,M<=100 1< K<=N*M),表示了棋盘的高、宽,以及可以放“车”的格子数目。接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。
Output
对输入的每组数据,按照如下格式输出:
Board T have C important blanks for L chessmen.
Sample Input
3 3 4
1 2
1 3
2 1
2 2
3 3 4
1 2
1 3
2 1
3 2
Sample Output
Board 1 have 0 important blanks for 2 chessmen.
Board 2 have 3 important blanks for 3 chessmen.
思路:
题目是求两个答案,把棋盘的行和列看做点,可以放棋子的地方看做行和列之间的边,放尽量多的棋子就是图的最小点覆盖,另外还要求重要的点的个数,最暴力的方法就是每次去掉一个点,每次求图的最小点覆盖,若和之前求出的最小点覆盖不一致,说明去掉的点是关键点,统计数量即可,这么暴力都能过。。。也是醉了。。。#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 110; int cas = 0; bool g ; int cnt, head ; int nx, ny, match ; bool vis ; int a[N*N], b[N*N]; void add_edge(int v, int u) { g[v][u] = true; } bool dfs(int v) { for(int i = 1; i <= ny; i++) { if(! vis[i] && g[v][i]) { vis[i] = true; if(match[i] == -1 || dfs(match[i])) { match[i] = v; return true; } } } return false; } int hungary() { int res = 0; memset(match, -1, sizeof match); for(int i = 1; i <= nx; i++) { memset(vis, 0, sizeof vis); if(dfs(i)) res++; } return res; } int main() { int n, m, k; while(~ scanf("%d%d%d", &n, &m, &k)) { memset(g, 0, sizeof g); for(int i = 0; i < k; i++) { scanf("%d%d", &a[i], &b[i]); add_edge(a[i], b[i]); } nx = n, ny = m; int ans = hungary(), tm = 0; for(int i = 0; i < k; i++) { g[a[i]][b[i]] = false; if(hungary() != ans) tm++; g[a[i]][b[i]] = true; } printf("Board %d have %d important blanks for %d chessmen.\n", ++cas, tm, ans); } return 0; }
相关文章推荐
- hdu 1281 棋盘游戏(二分图匹配--最小点覆盖)
- hdu1281棋盘游戏(二分匹配,最小顶点覆盖)
- hdoj--1281--棋盘游戏(最小点覆盖+枚举)
- hdoj--1281--棋盘游戏(最小点覆盖+枚举)
- 分冶—递归 更有效的算法方法(棋盘覆盖,分段区间,循环赛事日程表,最大最小值 )
- nyoj237 游戏高手的烦恼(最小点覆盖)
- poj 3308(3041) 二部图最小点权覆盖(杀死棋盘上所有的伞兵)
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
- NYOJ 237 游戏高手的烦恼 最小点集覆盖 = 二分图最大匹配
- hdu1281 棋盘游戏 二分图最大匹配
- nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖
- hdu1281 棋盘游戏 --- 最大匹配
- 完全覆盖 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 有一天小董子在玩一种游戏----用2*1或1*2的骨牌把m*n的棋盘完全覆盖。但他感觉游戏过于简单,于是就随机生
- nyoj 游戏高手的烦恼 (二分图最小点覆盖)
- NYOJ 237 游戏高手的烦恼(二分图最小点集覆盖)
- hdu1281 棋盘游戏 --- 最大匹配
- HDU1281-棋盘游戏
- hdu1281 棋盘游戏(最大匹配)
- hdu1281 棋盘游戏(匹配)
- HDU1281 棋盘游戏(匈牙利算法,暴力)