poj1422Air Raid(最小路径覆盖)

http://poj.org/problem?id=1422

题意:一个镇上有很多街道,很多十字路口,无循环,把伞兵放在各个十字路口上,使之能把所有的街道都走过,求最小的伞兵数。

最小路径覆盖=节点数-最大匹配。模板题

View Code
 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 using namespace std;

 5 int map[200][200],link[200],vis[200];

 6 int find(int x,int n)

 7 {

 8     int i,j;

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

10     {

11         if(map[x][i]&&!vis[i])

12         {

13             vis[i] = 1;

14             if(link[i]==0||find(link[i],n))

15             {

16                 link[i] = x;

17                 return 1;

18             }

19         }

20     }

21     return 0;

22 }

23 int main()

24 {

25     int i,j,k,n,m,t,a,b;

26     cin>>t;

27     while(t--)

28     {

29         memset(link,0,sizeof(link));

30         memset(map,0,sizeof(map));

31         cin>>n>>m;

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

33         {

34             cin>>a>>b;

35             map[a][b] = 1;

36         }

37         int sum = 0;

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

39         {

40             memset(vis,0,sizeof(vis));

41             if(find(i,n))

42             sum++;

43         }

44         cout<<n-sum<<endl;

45     }

46     return 0;

47 }

 

你可能感兴趣的:(raid)