Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 14476 | Accepted: 7880 |
Description
Input
Output
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
Hint
题目大意是导弹可以消灭直线上的障碍物,给出障碍物的位置,问最少需要多少导弹,把矩阵中的行放一边,列放另一边,按二分图做,就不是很难了,这一类的题目主要就是主函数那里有点不一样,其他套着模板来。
模板题
AC代码:
#include <stdio.h> #include <string.h> #define MAXN 510 int N,K,ans; bool map[MAXN][MAXN]; int match[MAXN]; bool vis[MAXN]; bool find(int u) { int i; for ( i=1; i<=N; i++) { if (map[u][i] && !vis[i] ) { vis[i] = true; if ( match[i] == -1 || find(match[i]) ) { match[i] = u; return true; } } } return false; } int main() { int i,x,y; ans = 0; scanf("%d%d",&N,&K); memset(map,0,sizeof(map)); memset(match,-1,sizeof(match)); for (i=0; i<K; i++) { scanf("%d%d",&x,&y); map[x][y] = 1; } for (i=1; i<=N; i++) { memset(vis,0,sizeof(vis)); if (find(i)) ans++; } printf("%d\n",ans); return 0; }
poj 3041(最大匹配问题),布布扣,bubuko.com
原文地址:http://blog.csdn.net/u012766950/article/details/37908957