Submission #1048171

#TimeUsernameProblemLanguageResultExecution timeMemory
1048171boyliguanhanKeys (IOI21_keys)C++17
67 / 100
3099 ms72360 KiB
#include<bits/stdc++.h> using namespace std; typedef vector<int> VI; #pragma GCC optimize(3) vector<pair<int,int>>adj[300100]; int col[300100],got[300100],went[300100],bst; vector<int> onez; bitset<300100>don; VI unlocked[300100]; mt19937 rng(random_device{}()); int CDC; void simul(int n){ CDC++; queue<int>q; q.push(n); int CNT=0; went[n]=CDC; unordered_set<int>hav; while(q.size()){ int x=q.front(); q.pop(); CNT++; if(CNT>bst)break; went[x]=CDC; if(got[col[x]]^CDC){ got[col[x]]=CDC; for(auto i:unlocked[col[x]]) if(went[i]^CDC) { q.push(i),went[i]=CDC; if(don[i]){CNT=1e9;goto hmm;} } unlocked[col[x]].clear(); } for(auto[v,c]:adj[x]) if(got[c]==CDC) { if(went[v]^CDC) { q.push(v),went[v]=CDC; if(don[v]){CNT=1e9;goto hmm;} } }else unlocked[c].push_back(v),hav.insert(c); } hmm: don[n]=1; for(auto i:hav) unlocked[i].clear(); if(CNT<bst) bst=CNT,onez.clear(); if(CNT==bst) onez.push_back(n); } VI find_reachable(VI r, VI u, VI v, VI c) { bst=1e9; int n=r.size(),m=c.size(); VI ord(n),ans(n); iota(ord.begin(),ord.end(),0); shuffle(ord.begin(),ord.end(),rng); for(int i=0;i<n;i++) col[i]=r[i]; for(int i=0;i<m;i++) adj[u[i]].push_back({v[i],c[i]}), adj[v[i]].push_back({u[i],c[i]}); for(int i=0;i<n;i++) shuffle(adj[i].begin(),adj[i].end(),rng); for(auto i:ord) simul(i); don.reset(); int x=onez.size(); for(int i=0;i<x;i++) simul(onez[i]); for(int i=0;i<n;i++) if(went[i]>n) 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...