Submission #1166923

#TimeUsernameProblemLanguageResultExecution timeMemory
1166923PagodePaivaKeys (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...