제출 #1092988

#제출 시각아이디문제언어결과실행 시간메모리
1092988Jawad_Akbar_JJVillage (BOI20_village)C++17
25 / 100
80 ms23236 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int N = 1e5 + 10; vector<int> nei[N], lst; int Num[N], Num2[N], ch[N], Mx = 0, Mn = 0, n; void dfs(int u, int p, int c = 0){ ch[u] = 1; for (int i : nei[u]){ if (i == p) continue; dfs(i, u, c); ch[u] += ch[i]; Mx += min(n - ch[i], ch[i]); } if (c == 0) return; vector<int> vec = {u}; for (int i : nei[u]){ if (i == p or ch[i] % 2 == 0) continue; int k = Num2[i]; Num2[i] = vec.back(); vec.push_back(k); } Num2[u] = vec.back(); Mn += (vec.size() - 1) * 2; } int find_cent(int u, int p){ for (int i : nei[u]) if (i != p and ch[i] * 2 > ch[1]) return find_cent(i, u); return u; } void get(int u, int p){ for (int i : nei[u]) if (i != p) get(i, u); lst.push_back(u); } vector<int> get(int a, int b, int c){ lst.clear(); get(a, b); return lst; } void solve(){ dfs(1, 1, 1); int rt = find_cent(1, 1), ind = 0; dfs(rt, rt); vector<pair<int,int>> vec; for (int i=0;i<nei[rt].size();i++) vec.push_back({ch[nei[rt][i]], nei[rt][i]}); sort(rbegin(vec), rend(vec)); vector<int> Vec = get(vec[0].second, rt, 1); for (int i=1;i<vec.size();i++){ vector<int> v = get(vec[i].second, rt, 1); for (int j : v) Num[j] = Vec[ind++], Vec.push_back(j); } Vec.push_back(rt); Num[rt] = Vec[ind++]; for (int i=0;i<vec[0].first;i++) Num[Vec[i]] = Vec[ind++]; } int main(){ cin>>n; for (int i=1, a, b;i<n;i++){ cin>>a>>b; nei[a].push_back(b); nei[b].push_back(a); } if (n == 1){ cout<<1 / 0; return 0; } solve(); if (Num2[1] == 1) swap(Num2[nei[1][0]], Num2[1]), Mn += 2; cout<<Mn<<" "<<Mx<<'\n'; for (int i=1;i<=n;i++) cout<<Num2[i]<<' '; cout<<'\n'; for (int i=1;i<=n;i++) cout<<Num[i]<<' '; cout<<'\n'; }

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

Village.cpp: In function 'void solve()':
Village.cpp:57:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |  for (int i=0;i<nei[rt].size();i++)
      |               ~^~~~~~~~~~~~~~~
Village.cpp:62:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |  for (int i=1;i<vec.size();i++){
      |               ~^~~~~~~~~~~
Village.cpp: In function 'int main()':
Village.cpp:83:11: warning: division by zero [-Wdiv-by-zero]
   83 |   cout<<1 / 0;
      |         ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...