HDU 2063 過山車(二分圖裸題)
阿新 • • 發佈:2019-01-27
題意:
中文題,就是問你最大匹配有多少
這個才不是連結呢
下面直接程式碼吧,這個直接套模板就好= =;
/*鏈式前向星*/
#include<iostream>
#include<string>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std ;
const int maxn = 1e5 + 10 ;
int head[maxn] , line[maxn] , vis[maxn] ;
int cnt ;
void init(){
memset (head , -1 , sizeof(head)) ;
cnt = 0 ;
}
struct node{
int v , next ;
}a[maxn];
void add(int u, int v)
{
a[cnt].v = v;
a[cnt].next = head[u];
head[u] = cnt++;
}
int find(int x)
{ // 演算法模板
int i;
for(i = head[x]; i != -1; i = a[i].next)
{
int v = a[i].v;
if (vis[v] == -1)
{
vis[v] = 1;
if(line[v] == -1 || find(line[v]))
{
line[v] = x;
return 1;
}
}
}
return 0;
}
int main(){
int k ;
while(cin >> k ){
if(k == 0 ) break ;
int n , m ;
cin >> m >> n ;
init() ;
int u , v ;
for(int i = 0 ; i < k ; i++){
scanf("%d %d",&u ,&v) ;
add(u , v) ;
}
int ans = 0 ;
memset(line , -1 , sizeof(line)) ;
for(int i = 1 ; i <= m ; i++){
memset(vis , -1 , sizeof(vis)) ;
if(find(i)) ans++ ;
}
cout << ans << endl ;
}
return 0 ;
}