Submission #1315239

#TimeUsernameProblemLanguageResultExecution timeMemory
1315239yus1f_mConnecting Supertrees (IOI20_supertrees)C++20
19 / 100
104 ms22196 KiB
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include "supertrees.h"
using namespace std;
const int sz=1001,INF=1000000000;
vector<int>parent(sz,-1);
int get(int num)
{
    if(parent[num]<0)
    {
        return num;
    }
    else
    {
        parent[num]=get(parent[num]);
        return get(parent[num]);
    }
}
void unite(int num1,int num2)
{
    int res1=get(num1),res2=get(num2);
    if(res1!=res2)
    {
        if(parent[res1]>parent[res2])
        {
            swap(res1,res2);
        }
        parent[res1]+=parent[res2],parent[res2]=res1;
    }
}
int construct(vector<vector<int>>nums)
{
	vector<vector<int>>res(nums.size()),ans(nums.size(),vector<int>(nums.size(),0));
	for(int i=0;i<nums.size();i++)
	{
		for(int j=0;j<nums.size();j++)
		{
			if(nums[i][j]==2)
			{
				unite(i,j);
			}
		}
	}
	for(int i=0;i<nums.size();i++)
	{
		for(int j=0;j<nums.size();j++)
		{
			if(nums[i][j]==0)
			{
				if(get(i)==get(j))
				{
					return 0;
				}
			}
		}
	}
	for(int i=0;i<nums.size();i++)
	{
		res[get(i)].push_back(i);
	}
	for(int i=0;i<nums.size();i++)
	{
		if(res[i].size()>=2)
		{
			if(res[i].size()==2)
			{
				return 0;
			}
			else
			{
				for(int j=0;j<res[i].size();j++)
				{
					ans[res[i][j]][res[i][(j+1)%res[i].size()]]=1,ans[res[i][(j+1)%res[i].size()]][res[i][j]]=1;
				}
			}
		}
	}
	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...