/*
2011-7-30
author:BearFly1990
tag:二分图 胸牙利算法
*/
//package acm.hdu.tests;
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main{
/**
* @param args
*/
static int maxN = 1002;
static int[][] graph ;
static int[] M = new int[maxN];
static int[] visited ;
static int k, n , m;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(new BufferedInputStream(System.in));
while(cin.hasNext()){
k = cin.nextInt();
if(k == 0 )break;
n = cin.nextInt();
m = cin.nextInt();
graph = new int[maxN][maxN];
for(int i = 0; i < k; i++){
int x = cin.nextInt();
int y = cin.nextInt();
graph[x-1][y-1] = 1;
}
int result = hungary();
System.out.println(result);
}
}
public static int hungary(){
int ans = 0;
for(int i = 0 ; i < maxN; i++){
M[i] = -1;
}
for(int i = 0; i < n; i++){
visited = new int[maxN];
if(dfs(i))ans++;
}
return ans;
}
public static boolean dfs(int now){
for(int i = 0; i < m; i++){
if(visited[i] == 0 && graph[now][i] == 1){
visited[i] = 1;
if(M[i] == -1 || dfs(M[i])){
M[i] = now;
return true;
}
}
}
return false;
}
}
hdu 2063 过山车
最新推荐文章于 2019-08-13 20:12:06 发布