#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |