记录编号 |
575834 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
中心台站建设 |
最终得分 |
100 |
用户昵称 |
HeSn |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.017 s |
提交时间 |
2022-09-28 20:43:10 |
内存使用 |
2.59 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, g[110][110], ans, f[110], vis[110], cs[10010][110], csn[110], a[110], cnt;
void dfs(int x, int c) {
if(c > ans) {
return ;
}
csn[c] = x;
for(int i = 1; i <= n; i ++) {
f[i] += g[x][i];
}
bool flg = 1, sc[110] = {0};
for(int i = 1; i <= n; i ++) {
if(!f[i]) {
flg = 0;
for(int j = x + 1; j <= n && !sc[j]; j ++) {
if(g[j][i] == 1) {
sc[j] = true;
dfs(j, c + 1);
}
}
}
}
if(flg) {
if(c < ans) {
cnt = 1;
ans = c;
}
else {
++ cnt;
}
for(int i = 1; i <= c; i ++) {
cs[cnt][i] = csn[i];
}
}
for(int i = 1; i <= n; i ++) {
if(g[x][i] == 1) {
-- f[i];
}
}
}
signed main() {
freopen("zpj.in", "r", stdin);
freopen("zpj.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i ++) {
for(int j = 1; j <= n; j ++) {
cin >> g[i][j];
}
g[i][i] = 1;
}
ans = 1000001;
for(int i = 1; i <= n; i ++) {
memset(vis, 0, sizeof(vis));
for(int j = 1; j <= n; j ++) {
vis[j] = g[i][j];
}
dfs(i, 1);
}
cout << ans << endl;
cout << cnt << endl;
for(int i = 1; i <= cnt; i ++) {
for(int j = 1; j <= ans; j ++) {
cout << cs[i][j] << ' ';
}
cout << endl;
}
return 0;
}