Submission #1136565

#TimeUsernameProblemLanguageResultExecution timeMemory
1136565bestbestConnecting Supertrees (IOI20_supertrees)C++20
11 / 100
115 ms26176 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
#define  en '\n'
#define  sp ' '
const int N=1000;

int par[N],chk[N][N],vis[N],branch[N];
map<int,vector<int>> m;


int find(int a){
	if(a!=par[a])return par[a]=find(par[a]);
	return par[a];
}

int construct(vector<vector<int>> p) {


	int n = p.size();
	vector<vector<int>> answer;

    for (int i = 0; i < n; i++) {
		vector<int> row;
		row.resize(n);
		answer.push_back(row);
	}


    for(int i=0;i<N;i++)par[i]=i;

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(p[i][j] && (chk[i][j]==0 || chk[i][j]==1)){
                chk[i][j]=1;
                par[find(i)]=par[find(j)];
            }
            else if(!p[i][j] && (chk[i][j]==0 || chk[i][j]==-1)){
                chk[i][j]=-1;
            }
            else return 0;
        }
    }

    for(int i=0;i<n;i++){
        m[par[i]].push_back(i);
    }
    //cout << m.size() << "eo" << en;

    for(auto [k,v]:m){
        for(int i=0;i<v.size()-1;i++){
            //cout << v[i] << sp;
            answer[v[i]][v[i+1]]=1;
            answer[v[i+1]][v[i]]=1;
        }
        //cout << en;
    }


	
    // for(int i=0;i<n-1;i++)answer[i][i+1]=answer[i+1][i]=1;
	build(answer);
	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...