Submission #471150

#TimeUsernameProblemLanguageResultExecution timeMemory
471150Cross_RatioConnecting Supertrees (IOI20_supertrees)C++14
0 / 100
1 ms204 KiB
#include <bits/stdc++.h>
#include "supertrees.h"
using namespace std;

//void build(vector<vector<int> >);

struct UnionFind {
    vector<int> root;
    UnionFind(int N) {
        root.resize(N);
        fill(root.begin(),root.end(),-1);
    }
    int Find(int a) {
        if(root[a] < 0) return a;
        int r = Find(root[a]);
        root[a] = r;
        return r;
    }
    void Merge(int a, int b) {
        a = Find(a);
        b = Find(b);
        if(a == b) return;
        if(root[a] > root[b]) swap(a, b);
        root[a] += root[b];
        root[b] = a;
    }
};

int construct(vector<vector<int> > p) {
	vector<vector<int> > ans;
	int N = p.size();
	ans.resize(N);
	int i;
	for(i=0;i<N;i++) ans[i].resize(N);
	int j;
	UnionFind UF(N);
	for(i=0;i<N;i++) {
        for(j=0;j<i;j++) {
            if(p[i][j]) {
                ans[i][UF.Find(j)] = 1;
                UF.Merge(i, j);
            }
            else {
                if(UF.Find(i) == UF.Find(j)) return 0;
            }
        }
	}
	build(ans);
	return 1;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...