제출 #1008597

#제출 시각아이디문제언어결과실행 시간메모리
1008597Malix열쇠 (IOI21_keys)C++17
37 / 100
3061 ms29908 KiB
#include "keys.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; 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); vector<pii> a(n); REP(i,0,m){ a[u[i]].PB({v[i],c[i]}); a[v[i]].PB({u[i],c[i]}); } vi p(n,0); REP(i,0,n){ vi key(n,0); vii b(n); queue<int> pq; pq.push(i); int x=0; vi vis(n,0); while(!pq.empty()){ int k=pq.front(); pq.pop(); if(vis[k]==1)continue; vis[k]=1; key[r[k]]=1; for(auto d:b[r[k]])pq.push(d); b[r[k]].clear(); x++; for(auto d:a[k]){ if(key[d.S]==1)pq.push(d.F); else b[d.S].PB(d.F); } } p[i]=x; } int mn=inf; REP(i,0,n)mn=min(mn,p[i]); REP(i,0,n)ans[i]=(p[i]==mn?1:0); 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...