This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
int construct(std::vector<std::vector<int>> p) {
int n = p.size();
vector<vector<int>> comp(n);
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
if(p[i][j]){
comp[i].push_back(j);
}
}
}
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
if(p[i][j] && comp[i] != comp[j]) return 0;
}
}
vector<bool> vis(n,0);
vector<vector<int>> ans(n,vector<int>(n,0));
vector<int> roots;
for(int i = 0;i<n;i++){
if(!vis[i]){
roots.push_back(i);
for(int j = 0;j<(int)comp[i].size();j++){
if(comp[i][j] == i || p[i][comp[i][j]] != 1) continue;
ans[i][comp[i][j]] = 1;
ans[comp[i][j]][i] = 1;
vis[comp[i][j]] = 1;
}
}
}
vis.clear();
for(int i = 0;i<(int)roots.size();i++){
if(!vis[roots[i]]){
vector<int> x; x.push_back(roots[i]);
for(int j = 0;j<(int)roots.size();j++){
if(find(comp[roots[i]].begin(),comp[roots[i]].end(),roots[j]) != comp[roots[i]].end() && p[roots[i]][roots[j]] == 2){
x.push_back(roots[j]);
vis[roots[j]] = 1;
}
}
for(int j = 0;j<(int)x.size();j++){
if(j == (int)x.size()-1) {
if(x[j] == x[0]) continue;
ans[x[j]][x[0]] = 1;
ans[x[0]][x[j]] = 1;
}else{
if(x[j] == x[j+1]) continue;
ans[x[j]][x[j+1]] = 1;
ans[x[j+1]][x[j]] = 1;
}
}
}
}
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... |