Submission #1318856

#TimeUsernameProblemLanguageResultExecution timeMemory
1318856g31niusEaster Eggs (info1cup17_eastereggs)C++20
0 / 100
2 ms488 KiB
#include <vector>
using namespace std;

int query(vector<int> islands);

vector<vector<int>> adj;
vector<bool> visited;
vector<int> subtree;

void dfs(int node, int parent) {
    visited[node] = true;
    subtree.push_back(node);
    for (int next : adj[node]) {
        if (next != parent && !visited[next]) {
            dfs(next, node);
        }
    }
}

int findEgg(int N, vector<pair<int, int>> bridges) {
    // Build adjacency list
    adj.assign(N + 1, vector<int>());
    for (auto& edge : bridges) {
        adj[edge.first].push_back(edge.second);
        adj[edge.second].push_back(edge.first);
    }
    
    // Binary search approach on the tree
    int current = 1;
    
    while (true) {
        bool found = false;
        
        for (int neighbor : adj[current]) {
            // Get all nodes in this subtree
            subtree.clear();
            visited.assign(N + 1, false);
            visited[current] = true; // Mark current as visited to avoid going back
            
            dfs(neighbor, current);
            
            // Query this subtree
            if (query(subtree) == 1) {
                current = neighbor;
                found = true;
                break;
            }
        }
        
        // If no subtree contains the egg, it must be at current node
        if (!found) {
            return current;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...