Submission #763390

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

const int N = 1000;

int pa[N];

int fp(int u) { return pa[u] = (u == pa[u]) ? u : fp(pa[u]); }

int construct(vector<vector<int>> p)
{
	int n = p.size();
	vector<vector<int>> ans(n, vector<int>(n));

	for (int i=0 ; i<n ; i++) pa[i] = i;

	for (int i=0 ; i<n ; i++)
	{
		for (int j=i+1 ; j<n ; j++)
		{
			if (p[i][j] == 1)
			{
				ans[i][j] = ans[j][i] = 1;
				pa[fp(i)] = fp(j);
			}
		}
	}

	for (int i=0 ; i<n ; i++)
	{
		vector<int> loop;
		for (int j=i+1 ; j<n ; j++)
		{
			if (p[i][j] == 2 && fp(i) != fp(j))
			{
				loop.push_back(j);
				pa[fp(i)] = fp(j);
			}
		}

		if (loop.empty()) continue;

		int prv = i;
		for (int cur : loop)
		{
			ans[prv][cur] = ans[cur][prv] = 1;
			prv = cur;
		}
		ans[loop.back()][i] = ans[i][loop.back()] = 1;
	}

	for (int i=0 ; i<n ; i++)
	{
		for (int j=i+1 ; j<n ; j++)
		{
			if (p[i][j] == 3)
			{
				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...