【杭电】[2063]过山车
二分图匹配模板题目
#include<stdio.h>
#include<string.h>
int line[520][520];
int used[520],flag[520];
int n,m;
bool find(int x) {
for(int i=1; i<=m; i++) {
if(line[x][i]&&!used[i]) {
used[i]=1;
if(!flag[i]||find(flag[i])) {
flag[i]=x;
return true;
}
}
}
return false;
}
int main() {
int K;
while(scanf("%d",&K),K) {
memset(line,0,sizeof(line));
memset(flag,0,sizeof(flag));
scanf("%d %d",&n,&m);
while(K--) {
int x,y;
scanf("%d %d",&x,&y);
line[x][y]=1;
}
int cnt=0;
for(int i=1; i<=n; i++) {
memset(used,0,sizeof(used));
if(find(i)) {
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}
题目地址:【杭电】[2063]过山车