标签:
| 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;
}标签:
原文地址:http://www.cnblogs.com/lcchuguo/p/5401797.html