import java.io.BufferedInputStream;
import java.util.*;
public class Main {
private int k,m,n;
private boolean[][] mar;
private int[] p=new int[505];
private boolean[] v=new boolean[505];
private static Scanner sc=new Scanner(new BufferedInputStream(System.in));
boolean findSet(int x)
{
for(int i=1;i<=n;i++)
{
if(!mar[x][i]||v[i])
continue;
v[i]=true;
if(p[i]==0||findSet(p[i]))
{
p[i]=x;
return true;
}
}
return false;
}
void makeSet()
{
for(int i=0;i<k;i++)
{
int t1=sc.nextInt(),t2=sc.nextInt();
mar[t1][t2]=true;
}
int count=0;
for(int i=1;i<=m;i++)
{
Arrays.fill(v, false);
if(findSet(i))
count++;
}
System.out.println(count);
}
void init()
{
while(sc.hasNext())
{
k=sc.nextInt();
if(k==0) break;
m=sc.nextInt();
n=sc.nextInt();
mar=new boolean[505][505];
Arrays.fill(p, 0);
makeSet();
}
}
public static void main(String[] args)
{
new Main().init();
}
}
hdu 2063 过山车(二分图匹配)
最新推荐文章于 2019-08-22 15:10:07 发布
本文提供了一个使用Java实现的匹配算法示例,该算法通过寻找可行的配对来解决特定问题。具体而言,代码展示了如何定义一个二维布尔数组用于记录匹配状态,并利用递归函数进行搜索,最终统计并输出成功匹配的数量。
6万+

被折叠的 条评论
为什么被折叠?



