Submission #1367619

#TimeUsernameProblemLanguageResultExecution timeMemory
1367619elotelo966Connecting Supertrees (IOI20_supertrees)C++20
21 / 100
82 ms26120 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define fi first
#define se second
#define FOR for(int i=1;i<=n;i++)

#define lim 1005

vector<int> adj[lim];

int col[lim],vis[lim];

//~ void build(vector<vector<int>> v){
	//~ for(auto a:v){
		//~ for(auto b:a){
			//~ cout<<b<<" ";
		//~ }
		//~ cout<<'\n';
	//~ }
//~ }

inline void dfs(int node,int cur){
	vis[node]=1;
	col[node]=cur;
	for(auto go:adj[node]){
		if(vis[go])continue;
		dfs(go,cur);
	}
}

int construct(std::vector<std::vector<int>> p) {
	int n = p.size();
	std::vector<std::vector<int>> answer;
	for (int i = 0; i < n; i++) {
		std::vector<int> row;
		row.resize(n,0);
		answer.push_back(row);
		for(int j=0;j<n;j++){
			if(p[i][j]==1 && i!=j){
				adj[i].pb(j);
			}
		}
	}

	int timer=0;

	for(int i=0;i<n;i++){
		if(vis[i])continue;
		dfs(i,++timer);
	}
	
	for(int i=1;i<=timer;i++){
		vector<int> tut;
		for(int j=0;j<n;j++){
			if(col[j]==i){
				tut.pb(j);
			}
		}
		
		for(int j=1;j<(int)tut.size();j++){
			int node1=tut[j-1];
			int node2=tut[j];
			answer[node1][node2]=1;
			answer[node2][node1]=1;
		}
	}
	
	int stop=1;
	
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			if(p[i][j]){
				if(col[i]==col[j])continue;
				stop=0;
				break;
			}
			else{
				if(col[i]==col[j])stop=0;
			}
		}
	}
	
	if(stop)build(answer);
	return stop;
}

//~ int main(){
	//~ int n;cin>>n;
	//~ vector<vector<int>> gec;
	//~ FOR{
		//~ vector<int> tt;
		//~ for(int j=0;j<n;j++){
			//~ int x;cin>>x;
			//~ tt.pb(x);
		//~ }
		//~ gec.pb(tt);
	//~ }
	//~ construct(gec);
//~ }
#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...