标签:memset plm res 技术 class string font 不能 pre
http://poj.org/problem?id=1419
题意:
一张图黑白染色,相邻点不能都染黑色,最多能染几个黑色点
最大点独立集
但是图不能同构为二分图,不能用二分图匹配来做
那就爆搜吧
还可以转化为补图的最大团问题
#include<cstdio> #include<cstring> #include<iostream> using namespace std; bool map[101][101]; int color[101],res[101]; int n,ans,cnt; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-‘0‘; c=getchar(); } } bool can(int s) { for(int i=1;i<=n;++i) { if(map[s][i] && color[i]==1) return false; } return true; } void dfs(int p) { if(p>n) { ans=cnt; int k=0; for(int i=1;i<=n;++i) { if(color[i]==1) res[++k]=i; } return; } if(cnt+n-p+1<=ans) return; if(can(p)) { cnt++; color[p]=1; dfs(p+1); cnt--; } color[p]=2; dfs(p+1); } int main() { int T; read(T); int m,x,y; while(T--) { read(n); read(m); memset(map,false,sizeof(map)); memset(color,0,sizeof(color)); while(m--) { read(x); read(y); map[x][y]=map[y][x]=true; } ans=cnt=0; dfs(1); cout<<ans<<‘\n‘; for(int i=1;i<ans;++i) cout<<res[i]<<‘ ‘; cout<<res[ans]<<‘\n‘; } }
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 5384 | Accepted: 2515 | Special Judge |
Description
Input
Output
Sample Input
1 6 8 1 2 1 3 2 4 2 5 3 4 3 6 4 6 5 6
Sample Output
3 1 4 5
标签:memset plm res 技术 class string font 不能 pre
原文地址:http://www.cnblogs.com/TheRoadToTheGold/p/8007192.html