Submission #440501

# Submission time Handle Problem Language Result Execution time Memory
440501 2021-07-02T10:45:36 Z zxcvbnm Easter Eggs (info1cup17_eastereggs) C++14
0 / 100
8 ms 456 KB
#include <bits/stdc++.h>
#include "grader.h"

using namespace std;
const int maxN = 515;
vector<int> kids[maxN];
vector<int> adj[maxN];
vector<int> sz(maxN);
vector<bool> in(maxN, true), vis(maxN, false);

void dfs(int v, int p) {
    vis[v] = true;
    for(int u : adj[v]) {
        if (vis[u] || !in[u]) continue;
        dfs(u, v);
        kids[v].push_back(u);
        sz[v] += sz[u];
    }
}

vector<int> find_kids(int v) {
    vector<int> ans;
    ans.push_back(v);

    for(int u : kids[v]) {
        vector<int> f = find_kids(u);
        for(int g : f) {
            ans.push_back(g);
        }
    }
    return ans;
}

int findEgg (int N, vector < pair < int, int > > bridges)
{
    fill(in.begin(), in.end(), true);
//    for(int i = 1; i <= maxN; i++) {
//        adj[i].clear();
//    }

    set<int> s;
    for(auto i : bridges) {
        s.insert(i.first);
        s.insert(i.second);
    }

    for(auto i : bridges) {
        adj[i.first].push_back(i.second);
        adj[i.second].push_back(i.first);
        cerr << i.first << "<->" << i.second << "\n";
    }

    int lg = ceil(log2(N));
    int cc = N;
    for(int i = 1; i <= lg; i++) {
        fill(sz.begin(), sz.end(), 1);
        fill(vis.begin(), vis.end(), false);

        for(int j : s) {
            kids[j].clear();
        }
        for(int j : s) {
            if (in[j]) {
                dfs(j, j);
                break;
            }
        }
        for(int j : s) {
            cerr << j << " " << sz[j] << "\n";
            if (sz[j] == cc / 2 && in[j]) {
                vector<int> f = find_kids(j);
                for(int k : f) {
                    cerr << k << " ";
                }
                cerr << "\n";
                int ok = query(f);
                cerr << ok << "\n";
                if (ok == 0) {
                    for(int k : f) {
                        in[k] = false;
                    }
                } else {
                    fill(in.begin(), in.end(), false);
                    for(int k : f) {
                        in[k] = true;
                    }
                }
                break;
            }
        }
        cc = 0;
        for(int j : s) {
            cc += in[j];
        }
        for(int j: s) {
            cout << in[j] << " ";
        }
        cerr << cc << "\n\n";
    }
    int ans = -1;
    for(int i : s) {
        if (in[i]) {
            ans = i;
        }
    }

//    assert(ans != -1);
    return ans;
}
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 456 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 328 KB Execution killed with signal 13
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 8 ms 328 KB Execution killed with signal 13
2 Halted 0 ms 0 KB -