제출 #1166876

#제출 시각아이디문제언어결과실행 시간메모리
1166876PagodePaiva열쇠 (IOI21_keys)C++20
39 / 100
679 ms83308 KiB
#include<bits/stdc++.h> using namespace std; const int N = 300010; vector <int> g[N], gc[N]; int typ[N]; int mark[N]; vector <int> kosaraju; struct DSU{ int pai[N], sz[N]; DSU(){ for(int i = 0;i < N;i++){ pai[i] = i; sz[i] = 1; } } int find(int x){ return (pai[x] = (x == pai[x] ? x : find(pai[x]))); } void join(int a, int b){ a = find(a); b = find(b); if(a == b) return; if(sz[a] > sz[b]) swap(a, b); pai[a] = b; sz[b] += sz[a]; typ[b] |= typ[a]; } } dsu; void dfs2(int v, int rep){ dsu.join(v, rep); mark[v] = 1; for(auto x : gc[v]){ if(mark[x]) continue; dfs2(x, rep); } return; } void dfs(int v){ mark[v] = 1; for(auto x : g[v]){ if(mark[x]) continue; dfs(x); } kosaraju.push_back(v); } 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(); for(int i = 0;i < n;i++){ typ[i] = (1<<r[i]); } int m = u.size(); for(int cnt = 0;cnt < 32;cnt++){ for(int i = 0;i < n;i++){ g[i].clear(); mark[i] = 0; } kosaraju.clear(); for(int i = 0;i < m;i++){ if(dsu.find(u[i]) == dsu.find(v[i])) continue; if((typ[dsu.find(u[i])]&(1<<c[i]))){ g[dsu.find(u[i])].push_back(dsu.find(v[i])); gc[dsu.find(v[i])].push_back(dsu.find(u[i])); } if((typ[dsu.find(v[i])]&(1<<c[i]))){ g[dsu.find(v[i])].push_back(dsu.find(u[i])); gc[dsu.find(u[i])].push_back(dsu.find(v[i])); } } for(int i = 0;i < n;i++){ int v = dsu.find(i); if(mark[v]) continue; dfs(v); } for(int i = 0;i < n;i++){ mark[i] = 0; } while(!kosaraju.empty()){ int v = kosaraju.back(); kosaraju.pop_back(); if(mark[v]) continue; dfs2(v, v); } } int tam = n; for(int i = 0;i < n;i++){ if(g[dsu.find(i)].empty()) tam = min(tam, dsu.sz[dsu.find(i)]); } vector <int> ans; for(int i = 0;i < n;i++){ if(tam == dsu.sz[dsu.find(i)] and g[dsu.find(i)].empty()) ans.push_back(1); else ans.push_back(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...