제출 #1242896

#제출 시각아이디문제언어결과실행 시간메모리
1242896Sir_Ahmed_ImranKeys (IOI21_keys)C++17
9 / 100
110 ms47212 KiB
#include "keys.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 300001
#define nl '\n'
#define ff first
#define ss second
#define ll long long
#define ld long double
#define terminator main
#define pll pair<ll,ll>
#define add insert
#define append push_back
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()

int par[MAXN], vis[MAXN], p[MAXN];
vector<int> et, x[MAXN], a[MAXN];

int root(int v){
	if(par[v] == v) return v;
	par[v] = root(par[v]);
	return par[v];
}

void join(int v, int u){
	v = root(v), u = root(u);
	par[u] = v;
	p[v] += p[u];
	for(auto & i : x[u])
		x[v].append(i);
}

void dfs(int v){
	vis[v]++;
	et.append(v);
	for(auto & i : a[v]){
		if(vis[i] == 2) p[root(v)]++;
		else if(vis[i] == 1){
			int u = root(i);
			while(et.back() != u){
				join(u, et.back());
				et.pop_back();
			}
			p[u]--;
		}
		else{
			p[root(v)]++;
			dfs(i);
		}
	}
	vis[v]++;
	if(et.back() == v) et.pop_back();
}

vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c){
	int n, m, ans, ver;
	vector<int> vec;
	n = r.size(), m = v.size();
	for(int i = 0; i < n; i++){
		par[i] = i;
		x[i] = {i};
	}
	for(int i = 0; i < m; i++){
		if(r[u[i]] == c[i])
			a[u[i]].append(v[i]);
		if(r[v[i]] == c[i])
			a[v[i]].append(u[i]);
	}
	ans = n + 1;
	for(int i = 0; i < n; i++)
		if(!vis[i]) dfs(i);
	for(int i = 0; i < n; i++){
		ver = root(i);
		if(p[ver]) continue;
		if(ans > x[ver].size()){
			ans = x[ver].size();
			vec.clear();
		}
		if(ans == x[ver].size())
			for(auto & j : x[ver])
				vec.append(j);
	}
	vector<int> answer(n, 0);
	for(auto & i : vec)
		answer[i] = 1;
	return answer;
}
#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...