POJ 3041 Asteroids(二分图匹配)

题目链接

最大二分图匹配 = 最小点覆盖。。。上匈牙利模版。。

 1 #include <cstdio>

 2 #include <cstring>

 3 using namespace std;

 4 int p[501][501],used[501],linker[501];

 5 int n;

 6 int dfs(int x)

 7 {

 8     int i;

 9     for(i = 1; i <= n; i ++)

10     {

11         if(p[x][i]&&!used[i])

12         {

13             used[i] = 1;

14             if(!linker[i]||dfs(linker[i]))

15             {

16                 linker[i] = x;

17                 return 1;

18             }

19         }

20     }

21     return 0;

22 }

23 int main()

24 {

25     int i,m,sv,ev,ans;

26     scanf("%d%d",&n,&m);

27     memset(linker,0,sizeof(linker));

28     for(i = 1; i <= m; i ++)

29     {

30         scanf("%d%d",&sv,&ev);

31         p[sv][ev] = 1;

32     }

33     ans = 0;

34     for(i = 1; i <= n; i ++)

35     {

36         memset(used,0,sizeof(used));

37         if(dfs(i))

38             ans ++;

39     }

40     printf("%d\n",ans);

41     return 0;

42 }

 

你可能感兴趣的:(poj)