제출 #269721

#제출 시각아이디문제언어결과실행 시간메모리
269721egekabasEaster Eggs (info1cup17_eastereggs)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> //#include "grader.h" #define all(x) (x).begin(), (x).end() #define ff first #define ss second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<ull, ull> pull; typedef pair<int, int> pii; typedef pair<ld, ld> pld; int query(vector < int > islands){ for(auto u : islands) cout << u << ' '; cout << endl; int ret; cin >> ret; return ret; } vector<int> g[600]; int n, curn; int ok[600]; int sz[600]; void calcsz(int v, int prt){ sz[v] = 1; for(auto u : g[v]){ if(u == prt || ok[u] == 0) continue; calcsz(u, v); sz[v] += sz[u]; } } vector<int> curv, othv; void get(int v, int prt, vector<int> &curv){ curv.pb(v); for(auto u : g[v]){ if(u == prt || ok[u] == 0) continue; get(u, v, curv); } } int dfs(int v, int prt){ vector<pii> child; child.pb({-1, -1}); for(auto u : g[v]) if(ok[u]) child.pb({sz[u], u}); vector<bitset<60>> bs(child.size()); bs[0][0] = 1; for(int i = 1; i < child.size(); ++i) bs[i] = (bs[i-1]|(bs[i-1]<<child[i].ff)); int cur = (curn-1)/2; if(bs[child.size()-1][cur] == 0){ for(auto u : g[v]){ if(u == prt || ok[u] == 0) continue; int bef = sz[u]; sz[u] = sz[v]; sz[v] -= bef; if(dfs(u, v)) return 1; sz[v] += bef; sz[u] = bef; } return 0; } curv.clear(); othv.clear(); curv.pb(v); othv.pb(v); for(int i = child.size()-1; i >= 1; --i){ if(cur-child[i].ff >= 0 && bs[i-1][cur-child[i].ff]){ get(child[i].ss, v, curv); cur -= child[i].ff; } else get(child[i].ss, v, othv); } if(query(curv) == 0) swap(curv, othv); return 1; } int findEgg(int N, vector<pair<int, int>> bridges){ n = N; for(auto u : bridges){ g[u.ff].pb(u.ss); g[u.ss].pb(u.ff); } for(int i = 1; i <= n; ++i) curv.pb(i); while(1){ if(curv.size() == 1) return curv[0]; if(curv.size() == 2){ if(query({curv[0]})) return curv[0]; return curv[1]; } curn = curv.size(); for(int i = 1; i <= n; ++i) ok[i] = 0; for(auto u : curv) ok[u] = 1; int root = curv[0]; calcsz(root, 0); dfs(root, 0); } } /*int main(){ cout << findEgg(5, {{1, 2}, {1, 3}, {2, 4}, {4, 5}}) << '\n'; }*/

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

eastereggs.cpp: In function 'int dfs(int, int)':
eastereggs.cpp:52:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |     for(int i = 1; i < child.size(); ++i)
      |                    ~~^~~~~~~~~~~~~~
/tmp/ccF8qYz1.o: In function `query(std::vector<int, std::allocator<int> >)':
grader.cpp:(.text+0x0): multiple definition of `query(std::vector<int, std::allocator<int> >)'
/tmp/ccmKrn8u.o:eastereggs.cpp:(.text+0x30): first defined here
collect2: error: ld returned 1 exit status