제출 #1166923

#제출 시각아이디문제언어결과실행 시간메모리
1166923PagodePaiva열쇠 (IOI21_keys)C++20
37 / 100
805 ms8520 KiB
#include<bits/stdc++.h> using namespace std; const int N = 2010; vector <pair <int, int>> g[N]; int tipo[N]; vector <int> talvez[N]; int mark[N]; int n, m; int bfs(int v){ queue <int> q; set <int> s; s.insert(tipo[v]); q.push(v); memset(mark, 0, sizeof mark); int cnt = 0; while(!q.empty()){ auto v = q.front(); q.pop(); if(mark[v]) continue; cnt++; mark[v] = 1; s.insert(tipo[v]); while(!talvez[tipo[v]].empty()){ auto vv = talvez[tipo[v]].back(); talvez[tipo[v]].pop_back(); q.push(vv); } for(auto [x, p] : g[v]){ if(s.find(p) == s.end()){ talvez[p].push_back(x); } else{ q.push(x); } } } for(int i = 0;i < N;i++){ talvez[i].clear(); } return cnt; } 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 < n;i++){ tipo[i] = r[i]; } for(int i = 0;i < m;i++){ g[u[i]].push_back({v[i], c[i]}); g[v[i]].push_back({u[i], c[i]}); } vector <int> s; int mn = n; for(int i = 0;i < n;i++){ s.push_back(bfs(i)); mn = min(mn, s.back()); //cout << bfs(i) << ' '; } for(auto &x : s){ if(x == mn) x = 1; else x = 0; } return s; }
#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...