# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
732760 | raul2008487 | Connecting Supertrees (IOI20_supertrees) | C++17 | 0 ms | 0 KiB |
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<algorithm>
#include <vector>
std::vector<std::vector<int>> ans;
std::vector<bool> vis;
std::vector<std::vector<int>> dp;
void dfs(int i, int j, int n){
vis[j]=1;
for(int k1=j+1;k1<n;k1++){
if(dp[j][k1] && !vis[k1]){
ans[j][k1]=ans[k1][j]=1;
dfs(j,k1,n);
}
}
}
int construct(std::vector<std::vector<int>> p) {
int n = p.size();
vis.resize(n,false);
for(int i=0;i<n;i++){
std::vector<int> row;
row.resize(n,0);
ans.push_back(row);
}
for(int i=0;i<n;i++){
std::vector<int> d;
for(int j=0;j<n;j++){
d.push_backb(p[i][j]);
}
dp.push_back(d);
}
for (int i = 0; i < n; i++) {
if(!vis[i]){
vis[i]=1;
for(int j=i+1;j<n;j++){
if(p[i][j] && !vis[j]){
ans[i][j]=ans[j][i]=1;
dfs(i,j,n);
}
}
}
}
build(ans);
return 1;
}