loj 1201(最大独立集)

来源:互联网 发布:java编写小程序 编辑:程序博客网 时间:2024/06/05 21:54

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

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

 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

 

0 0
原创粉丝点击