记录编号 |
575847 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
中心台站建设 |
最终得分 |
100 |
用户昵称 |
00000 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.011 s |
提交时间 |
2022-09-28 22:04:18 |
内存使用 |
1.27 MiB |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,g[200][200];
int m[200],cnt=1,l=0x3f3f3f3f;
int ans[200][200],p[200];
void dfs(int x,int y)//所在城市,已建数量
{
if(y>l) return;
p[y]=x;
for(int q=1;q<=n;q++)
{
if(g[x][q]) m[q]++;
}
int flag=1;
// cout<<x<<" "<<y<<endl;
// for(int q=1;q<=n;q++)
// {
// cout<<m[q]<<" ";
// }
// cout<<endl;
bool s[200]={0};
for(int q=1;q<=n;q++)
{
if(!m[q])
{
flag=0;
for(int w=x+1;w<=n&&!s[w];w++)
{
if(g[w][q])
{
s[w]=1;
dfs(w,y+1);
}
}
}
}
// if(x==3&&y==2) cout<<flag<<endl;
if(flag)
{
if(y<l)
{
l=y;
cnt=0;
}
cnt++;
for(int q=1;q<=y;q++)
{
ans[cnt][q]=p[q];
}
}
for(int q=1;q<=n;q++)
{
if(g[x][q]) m[q]--;
}
}
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>>g[q][w];
if(q==w) g[q][w]=1;
}
}
for(int q=1;q<=n;q++)
dfs(q,1);
cout<<l<<endl<<cnt<<endl;
for(int q=1;q<=cnt;q++)
{
for(int w=1;w<=l;w++) cout<<ans[q][w]<<" ";
cout<<endl;
}
return 0;
}