Submission #1215443

#TimeUsernameProblemLanguageResultExecution timeMemory
1215443thelegendary08Keys (IOI21_keys)C++17
0 / 100
0 ms324 KiB
#include "keys.h"
#include<bits/stdc++.h>
#define vi vector<int>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define mp make_pair
#define pb push_back
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define pii pair<int,int>
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n';
#define vvi vector<vi>
#define vb vector<bool>
using namespace std;
std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) {
	int n = r.size();
	int m = u.size();
	vi ans(n);
	vvi adj(n);
	f0r(i,m){
		adj[u[i]].pb(v[i]);
		adj[v[i]].pb(u[i]);
	}
	long long sum = accumulate(ans.begin(), ans.end(), 0LL);
	vi ccsize;
	vvi ccs;
	vi cc(n);
	int cur = 0;
	vb vis(n);
	
	f0r(i,n){
		if(!vis[i]){
			int sz = 1;
			vis[i] = 1;
			cc[i] = cur;
			vi curcc; curcc.pb(i);
			queue<int>q; q.push(i);
			while(!q.empty()){
				int node = q.front(); q.pop();
				for(auto u : adj[node]){ if(vis[u])continue; vis[u] = 1; curcc.pb(u); cc[u] = cur; q.push(u); sz++; }
			}
			ccsize.pb(sz);
			ccs.pb(curcc);
			cur++;
		}
	}
	
	if(sum == 0){
		int mn = *min_element(ccsize.begin(), ccsize.end());
		f0r(i,n){
			if(ccsize[cc[i]] == mn)ans[i] = 1;
		}
		return ans;
	}
	else{
		f0r(i,n)if(r[i] != 0 || ccsize[cc[i]] == 1)ans[i] = 1;
		return ans;
	}
	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...