Submission #1229031

#TimeUsernameProblemLanguageResultExecution timeMemory
1229031LudisseyKeys (IOI21_keys)C++20
37 / 100
3095 ms30528 KiB
#include <bits/stdc++.h> using namespace std; #define all(a) (a.begin(), a.end()) #define sz(a) (int)a.size() std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) { std::vector<int> ans(r.size(), 1); int n=sz(r); vector<vector<pair<int,int>>> neigh(n); for (int i = 0; i < sz(u); i++) { neigh[u[i]].push_back({v[i],c[i]}); neigh[v[i]].push_back({u[i],c[i]}); } int mn=1e9; for (int s = 0; s < n; s++) { vector<bool> keys(n,false); vector<unordered_set<int>> to_visit(n); vector<int> visited(n); queue<int> q; q.push(s); while(!q.empty()){ int x=q.front(); q.pop(); if(visited[x]==2) continue; visited[x]=2; if(!keys[r[x]]){ for (auto _u : to_visit[r[x]]) { if(visited[_u]>=1) continue; visited[_u]=1; q.push(_u); } } keys[r[x]]=true; for (auto _u : neigh[x]) { if(visited[_u.first]>=1) continue; if(keys[_u.second]){ visited[_u.first]=1; q.push(_u.first); }else{ to_visit[_u.second].insert(_u.first); } } } int sm=-1; for (int i = 0; i < n; i++) sm+=(int)(visited[i]==2); ans[s]=sm; mn=min(mn,sm); } for (int i = 0; i < n; i++) { if(ans[i]==mn) ans[i]=1; else ans[i]=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...