loj 1201(最大独立集)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26913

思路:水题一枚,就是求最大独立集。最大独立集=顶点数-最大匹配。

loj 1201(最大独立集)
 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<vector>

 6 using namespace std;

 7 #define MAXN 1111

 8 #define FILL(a,b) memset(a,b,sizeof(a))

 9 

10 int n,m,ly[MAXN];

11 bool mark[MAXN];

12 

13 vector<int>g[MAXN];

14 

15 int dfs(int u)

16 {

17     for(int i=0;i<g[u].size();i++){

18         int v=g[u][i];

19         if(!mark[v]){

20             mark[v]=true;

21             if(ly[v]==-1||dfs(ly[v])){

22                 ly[v]=u;

23                 return 1;

24             }

25         }

26     }

27     return 0;

28 }

29 

30 

31 int MaxMatch()

32 {

33     int res=0;

34     FILL(ly,-1);

35     for(int i=1;i<=n;i++){

36         FILL(mark,false);

37         res+=dfs(i);

38     }

39     return res/2;

40 }

41 

42 int main()

43 {

44     int _case,u,v,t=1;

45     scanf("%d",&_case);

46     while(_case--){

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

48         for(int i=0;i<=n;i++)g[i].clear();

49         while(m--){

50             scanf("%d%d",&u,&v);

51             g[u].push_back(v);

52             g[v].push_back(u);

53         }

54         printf("Case %d: %d\n",t++,n-MaxMatch());

55     }

56     return 0;

57 }
View Code

 

你可能感兴趣的:(OJ)