Submission #446457

# Submission time Handle Problem Language Result Execution time Memory
446457 2021-07-22T03:07:01 Z lohacho Keys (IOI21_keys) C++17
9 / 100
349 ms 41360 KB
#include <bits/stdc++.h>

using namespace std;

std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) {
    int n = (int)r.size(), m = (int)u.size();
    vector<vector<int>> way(n), wayb(n);
    vector<vector<pair<int, int>>> wall(n);
    for(int i = 0; i < m; ++i){
        if(r[u[i]] == c[i]){
            way[u[i]].push_back(v[i]);
            wayb[v[i]].push_back(u[i]);
        }
        wall[u[i]].push_back({v[i], c[i]});
        if(r[v[i]] == c[i]){
            way[v[i]].push_back(u[i]);
            wayb[u[i]].push_back(v[i]);
        }
        wall[v[i]].push_back({u[i], c[i]});
    }
    vector<int> chk(n), chk2(n);
    auto dfs = [&](auto&&self, int x)->int{
        if(chk[x]) return x;
        chk[x] = 1;
        if(!(int)way[x].size()) return x;
        return self(self, way[x][0]);
    };
    auto dfs2 = [&](auto&&self, int x)->void{
        if(chk2[x]) return;
        chk[x] = chk2[x] = 1;
        for(auto&nxt:wayb[x]){
            self(self, nxt);
        }
    };
    vector<vector<int>> who(n);
    vector<int> col, same(n, -1), del;
    auto mdfs = [&](auto&&self, int x, int num)->void{
        same[x] = num;
        col.push_back(r[x]);
        for(auto&nxt:wall[x]){
            who[nxt.second].push_back(nxt.first);
            del.push_back(nxt.second);
        }
        for(auto&nxt:way[x]){
            if(same[nxt] == -1){
                self(self, nxt, num);
            }
        }
    };
    for(int i = 0; i < n; ++i){
        if(chk[i]){
            continue;
        }
        int rt = dfs(dfs, i);
        dfs2(dfs2, rt);
        for(auto&nxt:wall[rt]){
            who[nxt.second].push_back(nxt.first);
            del.push_back(nxt.second);
        }
        col.push_back(r[rt]);
        same[rt] = i;
        while((int)col.size()){
            int now = col.back(); col.pop_back();
            if(!(int)who[now].size()) continue;
            while((int)who[now].size()){
                int nxt = who[now].back(); who[now].pop_back();
                if(same[nxt] != -1) continue;
                mdfs(mdfs, nxt, i);
            }
        }
        while((int)del.size()){
            who[del.back()].clear();
            del.pop_back();
        }
    }
    vector<int> cnt(n);
    for(int i = 0; i < n; ++i){
        if(same[i] != -1){
            ++cnt[same[i]];
        }
    }
    int mn = (int)1e9;
    for(int i = 0; i < n; ++i){
        if(cnt[i] > 0) mn = min(mn, cnt[i]);
    }
    vector<int> ans(n, 0);
    for(int i = 0; i < n; ++i){
        if(same[i] != -1 && cnt[same[i]] == mn){
            ans[i] = 1;
        }
    }
    return ans;
}

# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 1 ms 292 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 204 KB Output is correct
17 Incorrect 1 ms 292 KB Output isn't correct
18 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 1 ms 292 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 204 KB Output is correct
17 Incorrect 1 ms 292 KB Output isn't correct
18 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Incorrect 349 ms 41360 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 1 ms 292 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 204 KB Output is correct
17 Incorrect 1 ms 292 KB Output isn't correct
18 Halted 0 ms 0 KB -