Submission #1367700

#TimeUsernameProblemLanguageResultExecution timeMemory
1367700DangerNoodle7591Connecting Supertrees (IOI20_supertrees)C++20
19 / 100
78 ms26124 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define N 1005



vector<int> grub[N];
int cev[N][N];



int father[N],sze[N];
int dsu(int x){
	if(father[x]==x)return x;
	return father[x]=dsu(father[x]);
}
void kardes(int x,int y){
	x=dsu(x);y=dsu(y);
	if(x==y)return;
	if(sze[x]<sze[y])swap(x,y);
	sze[x]+=sze[y];
	father[y]=x;
}



void build(vector<vector<int>> _b);
int construct(vector<vector<int>> p) {
	int n = p.size();
	for(int i=0;i<=n;i++){
		father[i]=i;
		sze[i]=1;
		grub[i].clear();
	}

	for (int i = 0; i < n; i++) {
		int iki=0,bir=0;
		for(int j=0;j<n;j++){
			cev[i][j]=0;
			if(p[i][j])kardes(i,j);
		}
	}

	for (int i = 0; i < n; i++) {
		for(int j=0;j<n;j++){
			if(p[i][j]==0&&dsu(i)==dsu(j))return 0;
			if(p[i][j]&&dsu(i)!=dsu(j))return 0;
		}
		grub[dsu(i)].pb(i);
	}


	for(int k=0;k<n;k++){
		if(dsu(k)!=k)continue;
		int once=-1;
		int m=grub[k].size();
		if(m<=1)continue;
		if(m==2)return 0;
		for(auto u:grub[k]){
			for(auto uu:grub[k]){
				if(uu==u)continue;
				if(p[u][uu]!=2)return 0;
			}
		}
		for(int i=0;i<m;i++){

			cev[grub[k][i]][grub[k][((i-1+m)%m)]]=1;
			cev[grub[k][((i-1+m)%m)]][grub[k][i]]=1;
				
			cev[grub[k][i]][grub[k][((i+1+m)%m)]]=1;
			cev[grub[k][((i+1+m)%m)]][grub[k][i]]=1;
				
		}
	}



	vector<vector<int>> answer;
	for(int i=0;i<n;i++){
		vector<int> row;
		for(int j=0;j<n;j++){
			row.pb(cev[i][j]);
		}
		answer.pb(row);
	}

	build(answer);
	return 1;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...