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

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

loj 1201(最大独立集)_#includeloj 1201(最大独立集)_#define_02
 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