Submission #783558

#TimeUsernameProblemLanguageResultExecution timeMemory
783558mindiyakConnecting Supertrees (IOI20_supertrees)C++14
11 / 100
533 ms22016 KiB
#include "supertrees.h"
#include <vector>
#include <iostream>

#define pb push_back

using namespace std;

int find_head(vector<int> a,int val){
	if(a[val] == val)
	    return val;
	return find_head(a,a[val]);
}

int find_leaf(vector<int> a,int val){
	if(a[val] == val)
	    return val;
	return find_leaf(a,a[val]);
}

int construct(vector<vector<int>> p) {
    // cout << "started" << endl;
	int n = p.size();

	vector<vector<int>> ans;
	vector<int> temp(n,0);
	vector<int> head;
	vector<int> leaf;
	for (int i = 0; i < n; i++) {
		ans.pb(temp);
		head.pb(i);
		leaf.pb(i);
	}

	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(p[i][j] == 1){
				int c = min(i,j),d = max(i,j);
				int h_c = find_head(head,c);
				int h_d = find_head(head,d);
				if(h_c != h_d){
				    ans[h_c][h_d] = 1;
				    ans[h_d][h_c] = 1;
				}
				head[h_d] = h_c;
				leaf[h_c] = find_leaf(leaf,d);
			} 
		}
	}

	build(ans);
// 	cout << "finish" << endl;
	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...