比赛 EYOI与SBOI开学欢乐赛7th 评测结果 AAAAATTTAAT
题目名称 中心台站建设 最终得分 63
用户昵称 00000 运行时间 4.000 s
代码语言 C++ 内存使用 7.69 MiB
提交时间 2022-09-23 20:46:56
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
int n,a[200][200],ans[20000][200],cnt,mark[200],z=0x3f3f3f3f,c[200];
void check(int x)
{
	memset(c,0,sizeof(c));
	for(int q=1;q<=n;q++)
	{
		if(mark[q])
		{
			c[q]=1;
			for(int w=1;w<=n;w++)
			{
				if(a[q][w]) c[w]=1;
			}
		}
	}
	int flag=1;
	for(int q=1;q<=n;q++)
	{
		if(!c[q]) flag=0;
	}
	if(flag)
	{
		if(x==z)
		{
				cnt++;
			for(int q=1;q<=n;q++)
			{
				ans[cnt][q]=mark[q];
			}
		}
		if(x<z)
		{
			z=x;
			cnt=0;
			cnt++;
			for(int q=1;q<=n;q++)
			{
				ans[cnt][q]=mark[q];
			}
		}
		
	}
}
void dfs(int x,int y)
{
	check(x);
	if(x>=z) return;
	for(int q=y+1;q<=n;q++)
	{
		if(!mark[q])
		{
			mark[q]=1;
			dfs(x+1,q);
			mark[q]=0;
		}
	}
}
int main(){
	freopen("zpj.in","r",stdin);
	freopen("zpj.out","w",stdout);
cin>>n;
for(int q=1;q<=n;q++)
for(int w=1;w<=n;w++)
cin>>a[q][w];
dfs(0,0);
cout<<z<<endl<<cnt<<endl;
for(int q=1;q<=cnt;q++)
{
	for(int w=1;w<=n;w++)
	{
		if(ans[q][w]) cout<<w<<" ";
	}
	cout<<endl;
}
return 0;
}