답안 #61579

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
61579 2018-07-26T07:42:55 Z Flying_dragon_02 Easter Eggs (info1cup17_eastereggs) C++17
0 / 100
400 ms 500 KB
#include <bits/stdc++.h>
#include "grader.h"
using namespace std;

#define fi first
#define se second
#define pb push_back
#define mp make_pair

typedef pair<int, int> ii;

vector<int> graph[600];
int child[600], m, root, par[600], ok = 0;
bool vis1[600], vis2[600];
vector<int> ask;

void solve(int u, int p){
    vis2[u] = 1;
    ask.pb(u);
    for(int i = 0; i < graph[u].size(); i++){
        int v = graph[u][i];
        if(v == p) continue;
        solve(v, u);
    }
}

void dfs(int u){
    vis1[u] = 1;
    child[u] = 1;
    for(int i = 0; i < graph[u].size(); i++){
        int v = graph[u][i];
        if(vis2[v] == 0 && vis1[v] == 0){
            dfs(v);
            par[v] = u;
            child[u] += child[v];
        }
    }
    if(child[u] == m / 2 && ok == 0){
        solve(u, par[u]);
        ok = 1;
    }
}

int findEgg(int N, vector<ii> bridges){
    for(int i = 0; i < bridges.size(); i++){
        int u = bridges[i].fi, v = bridges[i].se;
        graph[u].pb(v); graph[v].pb(u);
    }
    int m = N;
    while(m != 1){
        ask.clear();
        ok = 0;
        for(int i = 1; i <= N; i++){
            if(vis2[i] == 0){
                memset(vis1, 0, sizeof(vis1));
                dfs(i);
                if(ask.size() > 0){
                    if(query(ask) == 0){
                        bool vis3[N];
                        for(int i = 0; i < ask.size(); i++){
                            vis3[ask[i]] = 1;
                            vis2[ask[i]] = 0;
                        }
                        for(int i = 1; i <= N; i++){
                            if(vis3[i] == 0 && vis2[i] == 0)
                                vis2[i] = 1;
                        }
                        break;
                    }
                }
            }
        }
        m = m / 2;
    }
    ask.clear();
    for(int i = 1; i <= N; i++){
        if(vis2[i] == 0){
            return i;
        }
    }
}

Compilation message

eastereggs.cpp: In function 'void solve(int, int)':
eastereggs.cpp:20:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < graph[u].size(); i++){
                    ~~^~~~~~~~~~~~~~~~~
eastereggs.cpp: In function 'void dfs(int)':
eastereggs.cpp:30:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < graph[u].size(); i++){
                    ~~^~~~~~~~~~~~~~~~~
eastereggs.cpp: In function 'int findEgg(int, std::vector<std::pair<int, int> >)':
eastereggs.cpp:45:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < bridges.size(); i++){
                    ~~^~~~~~~~~~~~~~~~
eastereggs.cpp:60:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                         for(int i = 0; i < ask.size(); i++){
                                        ~~^~~~~~~~~~~~
eastereggs.cpp:81:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 376 KB The found island is incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1041 ms 440 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1084 ms 500 KB Time limit exceeded
2 Halted 0 ms 0 KB -