제출 #1340602

#제출 시각아이디문제언어결과실행 시간메모리
1340602nagorn_ph슈퍼트리 잇기 (IOI20_supertrees)C++20
96 / 100
104 ms22208 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
#define pii pair <int, int>
#define tiii tuple <int, int, int>
#define tiiii tuple <int, int, int, int>
#define emb emplace_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define iShowSpeed cin.tie(NULL)->sync_with_stdio(false)
#define matrix vector <vector <int>>
#define mat(n, m) vector <vector <int>> (n, vector <int> (m));

using namespace std;

int par[1005], par2[1005];

int dsu(int a){
	return par[a] = (a == par[a] ? a : dsu(par[a]));
}

int dsu2(int a){
	return par2[a] = (a == par2[a] ? a : dsu2(par2[a]));
}

int construct(std::vector<std::vector<int>> a){
	int n = a.size();
	iota(par, par + n, 0ll);
	iota(par2, par2 + n, 0ll);
	vector <vector <int>> ans(n, vector <int> (n));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (a[i][j] == 1 && dsu(i) != dsu(j)) par[dsu(i)] = dsu(j), ans[i][j] = ans[j][i] = 1;
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (a[i][j] == 2) par2[dsu2(i)] = dsu2(j);
		}
	}
	vector <int> v[n];
	for (int i = 0; i < n; i++) if (dsu(i) == i) v[dsu2(i)].emb(i);
	for (int i = 0; i < n; i++) {
		int sz = v[i].size();
		if (sz == 1) continue;
		if (sz == 2) return 0;
		for (int j = 0; j < sz; j++) {
			ans[v[i][j]][v[i][(j + 1) % sz]] = ans[v[i][(j + 1) % sz]][v[i][j]] = 1;
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (a[i][j] == 0 && dsu2(dsu(i)) == dsu2(dsu(j))) return 0;
			if (a[i][j] == 1 && dsu(i) != dsu(j)) return 0;
			if (a[i][j] == 2 && (dsu2(dsu(i)) != dsu2(dsu(j)) || dsu(i) == dsu(j))) return 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...