标签:des style blog http color os strong io
解题报告
题意:
给出NxN的矩阵,有M个点是障碍
每次只能删除一行或者一列,最少删除多少次才能清除障碍
思路:
把行和列看作两个集合结点,把障碍看作集合结点的连线,这样就转化成求用最少的点来消灭边,也就是最小点覆盖。
在二分图中:(n个结点,且没有孤立的点)
最小点覆盖=最大匹配
最大点独立=结点数-最大匹配
#include <queue> #include <vector> #include <cstdio> #include <cstring> #include <iostream> #define N 510 using namespace std; int mmap[N+N][N+N],n,k,vis[N+N],pre[N+N]; int dfs(int x) { int i; for(i=n+1; i<=n+n; i++) { if(!vis[i]&&mmap[x][i]) { vis[i]=1; if(pre[i]==-1||dfs(pre[i])) { pre[i]=x; return 1; } } } return 0; } int main() { int i,j,x,y; while(cin>>n>>k) { memset(mmap,0,sizeof(mmap)); memset(pre,-1,sizeof(pre)); for(i=0; i<k; i++) { cin>>x>>y; mmap[x][n+y]=1; } int ans=0; for(i=1; i<=n; i++) { memset(vis,0,sizeof(vis)); ans+=dfs(i); } cout<<ans<<endl; } }
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 14694 | Accepted: 8016 |
Description
Input
Output
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
Hint
Source
POJ训练计划3041_Asteroids(二分图/最小点覆盖=最大匹配),布布扣,bubuko.com
POJ训练计划3041_Asteroids(二分图/最小点覆盖=最大匹配)
标签:des style blog http color os strong io
原文地址:http://blog.csdn.net/juncoder/article/details/38135053