제출 #1220385

#제출 시각아이디문제언어결과실행 시간메모리
1220385mariamtsagareliEaster Eggs (info1cup17_eastereggs)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
int q(vector<int>& v) {
    cout<<"? "<<v.size();
    for(int x : v) cout<<" "<<x;
    cout<<"\n"<<flush;
    int r; 
    cin>>r;
    return r;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n; cin>>n;
    vector<vector<int>> g(n+1);
    for (int i=1,u,v; i<n; i++) {
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector<int> s(n+1,1),z(n+1),p(n+1);
    vector<int> t;
    function<int(int,int)>d=[&](int u,int par){
        p[u]=par;
        z[u]=1;
        t.push_back(u);
        for (int w: g[u]) if(w!=par&&s[w])z[u]+=d(w,u);
        return z[u];
    };
    function<int()> f=[&]() {
        t.clear();
        int r=1;
        while (!s[r]) r++;
        d(r,0);
        int m=t.size();
        for (int u: t) {
            int mx=m-z[u];
            for (int w: g[u]) if(w!=p[u] && s[w]) mx=max(mx,z[w]);
            if (mx*2<=m) return u;
        }
        return t[0];
    };
    function<void(int,int,vector<int>&)> e=[&](int u,int par,vector<int>& c) {
        c.push_back(u);
        for (int w: g[u]) if(w!=par && s[w]) e(w,u,c);
    };
    while(1){
        vector<int> c;
        for (int i=1;i<=n;i++) if(s[i]) c.push_back(i);
        if (c.size()==1) {
            cout<<"! "<<c[0]<<"\n"<<flush;
            break; 
            
        }
        int u=f();
        if (q(*(new vector<int>{u}))) { 
            cout<<"! "<<u<<"\n"<<flush; 
            break;
            }
        vector<vector<int>> a;
        for (int w: g[u]) if(s[w]){
            vector<int>v;
            e(w,u,v); 
            a.push_back(v);
            }
        int l=0,
        r=a.size();
        while(r-l>1) {
            int m=(l+r)/2;
            vector<int> v={u};
            for (int i=l;i<m;i++) for (int x: a[i]) v.push_back(x);
            if (q(v)) r=m; else l=m;
        }
        vector<int> k=a[l];
        s.assign(n+1,0);
        for (int x:k) s[x]=1;
    }
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cco9lCp0.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc7RHeFo.o:eastereggs.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cco9lCp0.o: in function `main':
grader.cpp:(.text.startup+0x1e7): undefined reference to `findEgg(int, std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >)'
collect2: error: ld returned 1 exit status