Submission #816762

#TimeUsernameProblemLanguageResultExecution timeMemory
816762vjudge1Keys (IOI21_keys)C++17
0 / 100
1 ms1748 KiB
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
#include <chrono>
#include <random>
#include <bitset>
#include <array>
#include <iomanip>
using namespace std;

const int nax = (int)2e5;
struct DSU{
	int p[nax], sz[nax];

	void init(int N){
		for (int i = 0; i < N; i++){
			p[i] = i;
			sz[i] = 1;
		}
	}

	int f(int a){
		if (p[a] == a)return a;
		return p[a] = f(p[a]);
	}

	bool merge(int a, int b){
		a = f(a), b = f(b);
		if (a == b)return false;
		if (sz[a] < sz[b])swap(a,b);
		sz[a] += sz[b];
		p[b] = a;
		return true;
	}
};

std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) {
	std::vector<int> ans(r.size(), 1);
	int n = r.size();
	DSU d;
	d.init(n);
	for (int i = 0; i < (int)u.size(); i++){
		if (c[i] == 0)d.merge(u[i], v[i]);
	}
	int best = 0;
	vector<int>odg(n);
	for (int i = 0; i < n; i++){
		odg[i] = 1;
		if (r[i] == 0)odg[i] = d.sz[d.f(i)];
		best = max(best, odg[i]);
	}

	for (int i = 0; i < n; i++){
		ans[i] = 0;
		if (odg[i] == best)ans[i] = 1;
	}
	return ans;
}
#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...