Submission #1336569

#TimeUsernameProblemLanguageResultExecution timeMemory
1336569mantaggezConnecting Supertrees (IOI20_supertrees)C++20
21 / 100
108 ms22028 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;

const int nx = 1e3+5;

int n, dsu[nx], vs[nx];
vector<vector<int>> b;

int find(int x)
{
	if(dsu[x] == x) return x;
	dsu[x] = find(dsu[x]);
	return dsu[x];
}

void merge(int u, int v, int* dsu)
{
	int pu = find(u), pv = find(v);
	if(pu != pv)
		dsu[pu] = pv;
}

int construct(vector<vector<int>> p)
{
	n = p.size();
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(p[i][j] == 3) return 0;

	iota(dsu, dsu + nx, 0);
	b.resize(n);
	for(auto &row : b) row.resize(n);

	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(p[i][j] == 1 && i != j) merge(i, j, dsu);

	for(int i=0;i<n;i++) {
		for(int j=0;j<n;j++) {
			if(i != j && find(i) == find(j)) {
				if(p[i][j] == 1 && find(i) != j) b[find(i)][j] = 1, b[j][find(i)] = 1;
				if(p[i][j] == 0) return 0;
			}
		}
	}
	
	build(b);
	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...