제출 #343857

#제출 시각아이디문제언어결과실행 시간메모리
34385779brueSplit the Attractions (IOI19_split)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #include "split.h" using namespace std; typedef long long ll; int n, m, a, b, c; vector<int> link[100002]; int idx[4]; vector<int> ret; int cnt; int DP[100002]; int tmp=-1; int dfs(int x, int p = -1){ DP[x] = 1; for(auto y: link[x]){ if(p==y) continue; DP[x] += dfs(y, x); } if(min(DP[x], n - DP[x]) >= a){ tmp = x; } return DP[x]; } vector<int> find_split(int _n, int _a, int _b, int _c, vector<int> p, vector<int> q) { m = (int)p.size(); if(m != n-1){ while(1){ v.push_back(1); } } n = _n, a = _a, b = _b, c = _c; vector<pair<int, int> > v {make_pair(a, 1), make_pair(b, 2), make_pair(c, 3)}; sort(v.begin(), v.end()); a = v[0].first, b = v[1].first, c = v[2].first; idx[1] = v[0].second, idx[2] = v[1].second, idx[3] = v[2].second; for(int i=0; i<m; i++){ link[p[i]].push_back(q[i]); link[q[i]].push_back(p[i]); } ret.resize(n); dfs(0); if(tmp == -1) return ret; int rootNum, childNum; if(DP[tmp] >= a && n-DP[tmp] >= b) rootNum = 2, childNum = 1; else rootNum = 1, childNum = 2; queue<int> tq; tq.push(0); for(int cnt=0; cnt<((DP[tmp] >= a && n-DP[tmp] >= b) ? b : a); cnt++){ int tmp = tq.front(); tq.pop(); ret[tmp] = rootNum; for(auto y: link[tmp]){ if(y == tmp || ret[y]) continue; tq.push(y); } } while(!tq.empty()) tq.pop(); tq.push(tmp); for(int cnt=0; cnt<((DP[tmp] >= a && n-DP[tmp] >= b) ? a : b); cnt++){ int tmp = tq.front(); tq.pop(); ret[tmp] = childNum; for(auto y: link[tmp]){ if(ret[y]) continue; tq.push(y); } } for(int i=0; i<n; i++) if(!ret[i]) ret[i] = 3; for(int i=0; i<n; i++) ret[i] = idx[ret[i]]; return ret; }

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

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:32:9: error: 'v' was not declared in this scope
   32 |         v.push_back(1);
      |         ^