Submission #1059015

#TimeUsernameProblemLanguageResultExecution timeMemory
1059015LalicConnecting Supertrees (IOI20_supertrees)C++17
21 / 100
130 ms24148 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pb push_back
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
#define mp make_pair

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef complex<double> cd;

const int MAXN = 1e3+10;

int pai[MAXN], peso[MAXN];

int find(int x){ return (pai[x]==x ? x : pai[x]=find(pai[x])); }
void join(int a, int b){
	a=find(a);
	b=find(b);
	
	if(a==b) return;
	
	if(peso[a]>peso[b]) swap(a, b);
	pai[a]=b;
	peso[b]=max(peso[a]+1, peso[b]);
}

vector<int> adj[MAXN];

int construct(vector<vector<int>> p) {
	int n = (int)p.size();
	vector<vector<int>> ans(n, vector<int>(n, 0));
	
	for(int i=0;i<n;i++) pai[i]=i, peso[i]=0;
	
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			if(p[i][j]==1 && find(i)!=find(j)){
				join(i, j);
				adj[i].pb(j);
				ans[i][j]=ans[j][i]=1;
			}
		}
	}
	
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			if(!p[i][j] && find(i)==find(j)){
				//~ cout << i << " " << j << "\n";
				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...