Submission #1239463

#TimeUsernameProblemLanguageResultExecution timeMemory
1239463MuhammadSaramConnecting Supertrees (IOI20_supertrees)C++20
21 / 100
116 ms22196 KiB
#include "supertrees.h"
#include <bits/stdc++.h>

using namespace std;

int construct(vector<vector<int>> p)
{
	int n=p.size();
	bool vis[n]={};
	vector<vector<int>> vv;
	for (int i=0;i<n;i++)
	{
		if (vis[i]) continue;
		vis[i]=1;
		vector<int> v1={i};
		for (int j=i+1;j<n;j++)
			if (p[i][j])
				v1.push_back(j), vis[j]=1;
		vv.push_back(v1);
	}
	for (int i=0;i<vv.size();i++)
		for (int j=i;j<vv.size();j++)
		{
			for (int x:vv[i])
				for (int y:vv[j])
					if ((p[x][y]>0)!=(i==j))
						return 0;
		}
	for (int i=0;i<n;i++) vis[i]=0;
	vector<vector<int>> ans(n,vector<int>(n));
	for (auto v:vv)
	{
		int mx=0;
		for (int i:v)
			for (int j:v) mx=max(mx,p[i][j]);
		if (mx==1)
		{
			for (int j=0;j+1<v.size();j++)
				ans[v[j]][v[j+1]]=ans[v[j+1]][v[j]]=1;
			continue;
		}
		else if(mx==3) return 0;
		vector<vector<int>> v2;
		for (int i=0;i<v.size();i++)
		{
			if (vis[i]) continue;
			vector<int> v3;
			for (int j=i;j<(int)v.size();j++)
				if (p[v[i]][v[j]]==1)
					v3.push_back(v[j]), vis[j]=1;
			v2.push_back(v3);
		}
		int m=v2.size();
		for (int i=0;i<m;i++)
			for (int j=i;j<m;j++)
				for (int x:v2[i])
					for (int y:v2[j])
						if ((i==j)!=(p[x][y]==1))
							return 0;
		if (m<=2) return 0;
		for (int i=0;i<m;i++)
		{
			ans[v2[i][0]][v2[(i+1)%m][0]]=1,ans[v2[(i+1)%m][0]][v2[i][0]]=1;
			for (int j:v2[i])
				ans[v2[i][0]][j]=(j!=v2[i][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...