제출 #839297

#제출 시각아이디문제언어결과실행 시간메모리
839297andrei_boaca열쇠 (IOI21_keys)C++17
37 / 100
3061 ms39852 KiB
#include <vector> #include <bits/stdc++.h> #include "keys.h" //#include "grader.cpp" using namespace std; mt19937_64 rng(chrono::steady_clock().now().time_since_epoch().count()); typedef pair<int,int> pii; vector<pii> muchii[300005]; int use[300005]; int room[300005]; int cnt[300005]; int found[300005]; vector<pii> g[300005]; int seen[300005]; int n,m; std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) { n=r.size(); m=u.size(); for(int i=0;i<m;i++) { int a=u[i],b=v[i],cul=c[i]; muchii[a].push_back({b,cul}); muchii[b].push_back({a,cul}); g[cul].push_back({a,b}); } vector<int> ans; for(int i=0;i<n;i++) { ans.push_back(0); room[i]=r[i]; } int minim=1e9; for(int i=0;i<n;i++) { queue<int> coada; coada.push(i); while(!coada.empty()) { int nod=coada.front(); coada.pop(); if(use[nod]==i+1) continue; cnt[i]++; use[nod]=i+1; int cul=room[nod]; if(found[cul]!=i+1) { found[cul]=i+1; for(pii p:g[cul]) { int a=p.first; int b=p.second; if(use[a]!=i+1) swap(a,b); if(use[a]==i+1&&use[b]!=i+1) coada.push(b); } } for(pii p:muchii[nod]) { int a=p.first; int cc=p.second; if(found[cc]==i+1) if(use[a]!=i+1) coada.push(a); } } minim=min(minim,cnt[i]); } for(int i=0;i<n;i++) if(cnt[i]==minim) 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...