#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
const int N = 1e3 + 4;
int R[N];
bool vis[N];
vector<int> A;
vector<int> adj[N], tree[N];
void set_root(int v) {
vis[v]=1; A.pb(v);
tree[R[v]].pb(v);
for (int u : adj[v]) if (!vis[u]) {
R[u]=v; set_root(u);
}
}
void find_cyc(int v) {
vis[v]=1; A.pb(v);
for (int u : adj[v]) if (!vis[u]) find_cyc(u);
}
int construct(std::vector<std::vector<int>> p) {
int n = p.size();
vector ans(n, vector<int>(n));
rep(i, 0, n-1) {
if (p[i][i]!=1) return 0;
rep(j, 0, n-1) if (p[i][j]!=p[j][i] || p[i][j]==3) return 0;
}
rep(i, 0, n-1) rep(j, 0, n-1) if (p[i][j]==1) adj[i].pb(j), adj[j].pb(i);
rep(i, 0, n-1) if (!vis[i]) {
R[i]=i; set_root(i);
// for (int v:A) for (int u:A) if (p[v][u]!=1 || p[u][v]!=1) return 0;
for (int i=0; i+1 < A.size(); i++) ans[A[i]][A[i+1]] = ans[A[i+1]][A[i]] = 1;
A.clear();
}
rep(i, 0, n-1) adj[i].clear(), vis[i]=0;
rep(i, 0, n-1) rep(j, 0, n-1) if (p[i][j]==2) adj[R[i]].pb(R[j]), adj[R[j]].pb(R[i]);
rep(i, 0, n-1) if (!vis[i]) {
find_cyc(i);
if (A.size()==1) {A.clear(); continue;}
else if (A.size()==2) return 0;
A.pb(A[0]);
vector<int> cyc=A; A.clear();
for (int v:cyc) for (int u:tree[v]) A.pb(u);
for (int v:A) for (int u:A) if (R[v]!=R[u] && p[v][u]!=2) return 0;
for (int i=0; i+1 < cyc.size(); i++) ans[cyc[i]][cyc[i+1]] = ans[cyc[i+1]][cyc[i]] = 1;
A.clear();
}
build(ans); return 1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |