#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
int T,n,m,a,b,g[110][110],vis[110];
vector<int>ans;
vector<int>cnt;
void dfs(int now) {
if(now==n+1) {
if(ans.size()<cnt.size()) ans=cnt;
return;
}
if(n-now+1+cnt.size()<=ans.size()) return;
int t=vis[now];
if(!vis[now]) {
vis[now]=1;
cnt.push_back(now);
vector<int>tmp;//
for(int i=now+1;i<=n;i++) {
if(g[now][i]&&!vis[i]) {
vis[i]=1; tmp.push_back(i);//
}
}
dfs(now+1);
vis[now]=t;
cnt.pop_back();
for(int i=0;i<tmp.size();i++) {//
vis[tmp[i]]=0;
}
}
vis[now]=1;
dfs(now+1);
vis[now]=t;
}
int main() {
scanf("%d",&T);
while(T--) {
memset(g,0,sizeof(g));
ans.clear(); cnt.clear();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) {
scanf("%d%d",&a,&b);
g[a][b]=g[b][a]=1;
}
dfs(1);
printf("%d\n",ans.size());
for(int i=0;i<ans.size();i++) {
printf("%d ",ans[i]);
}
printf("\n");
}
}
POJ 1419 最大独立集 模板
最新推荐文章于 2021-08-02 22:00:35 发布