제출 #657763

#제출 시각아이디문제언어결과실행 시간메모리
657763Ronin13Torrent (COI16_torrent)C++14
100 / 100
573 ms29676 KiB
#include <bits/stdc++.h> #define ll long long #define f first #define s second #define pii pair<int,int> #define pll pair<ll,ll> #define epb emplace_back #define pb push_back #define ull unsigned ll using namespace std; const int NMAX = 3e5 + 1; vector <vector <int> > g(NMAX); vector <int> path; int dp[NMAX][2]; void dfs(int v, int ind, int e = -1){ for(int to : g[v]){ if(to && to != e){ dfs(to, ind, v); } } vector <int> vv; for(int to : g[v]){ if(to && to != e){ vv.pb(dp[to][ind]); } } sort(vv.begin(), vv.end()); reverse(vv.begin(), vv.end()); int mx = 0; for(int i= 0; i < vv.size(); i++){ mx = max(mx, vv[i] + i + 1); } dp[v][ind] = mx; } int a, b; pii compute(int x){ int v = path[x]; int u = path[x + 1]; for(int &to : g[v]){ if(to == u) to = 0; } for(int &to : g[u]){ if(to == v) to = 0; } dfs(a, 0); dfs(b, 1); for(int &to : g[v]){ if(!to) to = u; } for(int &to : g[u]){ if(!to) to = v; } return {dp[a][0], dp[b][1]}; } vector <int> p(NMAX); void DFS(int v, int e = -1){ p[v] = e; if(v == b){ while(v > 0){ path.pb(v); v = p[v]; } reverse(path.begin(), path.end()); return; } for(int to : g[v]){ if(to == e) continue; DFS(to, v); } } int main(){ int n; cin >> n; cin >> a >> b; for(int i = 1; i < n; i++){ int u, v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } DFS(a); int l = -1, r = path.size() - 1; /*for(int to : path){ cout << to << ' '; }*/ while(l + 1 < r){ int mid = (l + r) / 2; pii val = compute(mid); if(val.f > val.s) r = mid; else l = mid; } int x = compute(r).f; if(r > 0) x = min(x, compute(r - 1).s); cout << x; return 0; }

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

torrent.cpp: In function 'void dfs(int, int, int)':
torrent.cpp:31:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |     for(int i= 0; i < vv.size(); i++){
      |                   ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...