제출 #816939

#제출 시각아이디문제언어결과실행 시간메모리
816939vjudge1열쇠 (IOI21_keys)C++17
37 / 100
3070 ms27600 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;
	}
};

vector<pair<int,int>>adj[nax + 1];

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();
	for (int i = 0; i < (int)u.size(); i++){
		adj[v[i]].push_back({u[i], c[i]});
		adj[u[i]].push_back({v[i],c[i]});
	}
	vector<int>keys(n + 1, 0);
	vector<int>visited(n + 1,0);
	int cnt = 0;
	int left = 0;
	function<void(int)>dfs = [&](int u){
		if (visited[u])return;
		cnt++;
		visited[u] = 1;
		if (keys[r[u]] == 0){
			left--;
		}
		keys[r[u]] = 1;
		for (auto next : adj[u]){
			if (keys[next.second] == 1){
				dfs(next.first);
			}
		}
	};
	vector<int>odg(n,0);
	int best = (int)1e9;
	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			keys[j] = 0;
		}
		keys[r[i]] = 1;
		left = n - 1;
		while (left){
			int prev = left;
			for (int k = 0; k < n; k++){
				visited[k] = 0;
			}
			cnt = 0;
			dfs(i);
			best = min(best,cnt);
			odg[i] = cnt;
			if (prev == left)break;
		}
	}
	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...