1. 程式人生 > >HDU 2063 過山車(二分圖裸題)

HDU 2063 過山車(二分圖裸題)

題意:
中文題,就是問你最大匹配有多少
這個才不是連結呢
下面直接程式碼吧,這個直接套模板就好= =;

/*鏈式前向星*/

#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 ; }