Submission #1307345

#TimeUsernameProblemLanguageResultExecution timeMemory
1307345opeleklanosKeys (IOI21_keys)C++20
37 / 100
3094 ms24676 KiB
#include <iostream>
#include <vector>
#include "keys.h"
using namespace std;

vector<vector<pair<int, int>>> adj;
vector<int> foundKeys;
vector<int> vis;
vector<int> newVis;
vector<int> key_type;
int new_nodes = 1;

void dfs(int st){
    if(!vis[st]) new_nodes++;
    newVis[st] = 1;
    vis[st] = 1;
    foundKeys[key_type[st]] = 1;
    for(auto i : adj[st]){
        if(foundKeys[i.second] && !newVis[i.first]) dfs(i.first);
    }
}

vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c){
    int n = r.size();
    int m = c.size();
    key_type = r;
    vector<int> p(n, 0);
    adj.assign(n, {});
    for(int i = 0; i<m; i++){
        adj[u[i]].push_back({v[i], c[i]});
        adj[v[i]].push_back({u[i], c[i]});
    }
    for(int i = 0; i<n; i++){
        vis.assign(n, 0);
        new_nodes = 0;
        foundKeys.assign(n, 0);
        while(new_nodes || vis[i] == 0){
            new_nodes = 0;
            newVis.assign(n, 0);
            dfs(i);
        }
        for(int j = 0; j<n; j++) if(vis[j]) p[i]++;
    }
    int mn = n;
    for(int i = 0; i<n; i++) mn = min(mn, p[i]);
    for(int i = 0; i<n; i++) p[i] = (p[i] == mn)?1:0;
    return p;
}

// int main(void){
//     freopen("input.txt", "r", stdin);
//     int n1, m1;
//     cin>>n1>>m1;
//     vector<int> r1(n1);
//     vector<int> u1(n1);
//     vector<int> v1(n1);
//     vector<int> c1(n1);
//     for(int i = 0; i<n1; i++) cin>>r1[i];
//     for(int i = 0; i<m1; i++){
//         cin>>u1[i]>>v1[i]>>c1[i];
//     }
//     vector<int> ans = find_reachable(r1, u1, v1, c1);
//     for(auto i : ans) cout<<i<<endl;
// }
#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...