Submission #592028

#TimeUsernameProblemLanguageResultExecution timeMemory
592028SlavicGKeys (IOI21_keys)C++17
37 / 100
3084 ms71296 KiB
    #include "bits/stdc++.h"
    using namespace std;

    using ll = long long;

    #define forn(i, n) for(int i = 0; i < n; ++i)
    #define sz(a) (int)a.size()
    #define pb push_back
    #define all(a) a.begin(), a.end()

    const int N = 3e5 + 10;
    vector<pair<int, int>> adj[N];
    int cnt[N], s;
    bool vis[N];
    set<int> require[N];
    set<int> have[N];
    set<int> already;
    void dfs(int u, vector<int>& r) {
        assert(vis[u] == false);
        vis[u] = true;
        ++cnt[s];
        already.insert(r[u]);
        for(auto x: adj[u]) {
            int v = x.first, c = x.second;
            if(!vis[v]) {
                if(already.count(c)) {
                    dfs(v, r);
                } else {
                    require[c].insert(v);
                    have[v].insert(c);
                }
            }
        }
        //for(auto x: have[u]) require[x].erase(u);
        for(auto x: require[r[u]]) {
            if(!vis[x]) {
                dfs(x, r);
            }
        }
    }

    void solve(int start, vector<int>& r) {
        already.clear();
        s = start;
        forn(i, sz(r)) require[i].clear();
        forn(i, sz(r)) have[i].clear();
        forn(i, sz(r)) vis[i] = false;
        dfs(start, r);
    }
    vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) {
        for(int i = 0; i < sz(u); ++i) {
            adj[u[i]].pb({v[i], c[i]});
            adj[v[i]].pb({u[i], c[i]});
        }
        int n = sz(r);
    	vector<int> ans(n, 1);
        for(int i = 0; i < n; ++i) solve(i, r);
        forn(i, n) ans[i] = cnt[i];
        int x = *min_element(all(ans));
        for(int& i: ans) i = (i == x ? 1 : 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...