제출 #301762

#제출 시각아이디문제언어결과실행 시간메모리
301762SOIVIEONEConnecting Supertrees (IOI20_supertrees)C++14
0 / 100
1 ms384 KiB
#include "supertrees.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;

int ota[222222];
int find(int x)
{
    return (ota[x] == x ? x : ota[x] = find(ota[x]));
}

void unite(int x, int y)
{
    x = find(x);
    y = find(y);
    ota[y] = x;
}


int construct(std::vector<std::vector<int>> p) {
	int n = p.size();
	std::vector<std::vector<int>> a;
	for (int i = 0; i < n; i++) {
		std::vector<int> row;
		row.resize(n);
		a.push_back(row);
	}
	for(int i = 0; i < n; i ++)
        ota[i] = i;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j ++)
        {
            if(p[i][j])
            {
                unite(i, j);
            }
        }
    }
    for(int i = 0; i < n; i ++)
    {

        for(int j = 0; j < n; j ++)
        {
            if(i==j)continue;
            int otai = find(i);
            int otaj = find(j);
            if(((otai != otaj) && p[i][j]) || (!(otai^otaj) && !p[i][j]))
                return 0;
            a[i][j] = (otai==otaj);
        }
    }
	build(a);
	return 1;
}
/*
5
1 0 0 1 1
0 1 1 0 0
0 1 1 0 0
1 0 0 1 1
1 0 0 1 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...