Submission #994465

#TimeUsernameProblemLanguageResultExecution timeMemory
994465doducanhTorrent (COI16_torrent)C++14
100 / 100
250 ms26008 KiB
#include <bits/stdc++.h> using namespace std; const int maxn=3e5+7; vector<int>adj[maxn]; int dp[maxn]; int pa[maxn]; int n,a,b; void dfs1(int u,int par) { for(int v:adj[u])if(v!=par){ pa[v]=u; dfs1(v,u); } } int dfs2(int u,int par,int x,int y) { vector<int>tmp; dp[u]=0; for(int v:adj[u])if(v!=par){ if(u==x&&v==y)continue; if(v==x&&u==y)continue; dfs2(v,u,x,y); tmp.push_back(dp[v]); } sort(tmp.rbegin(),tmp.rend()); for(int i=0;i<tmp.size();i++){ dp[u]=max(dp[u],(tmp[i]+i+1)); } return dp[u]; } int delta(int x) { return (dfs2(a,0,x,pa[x])-dfs2(b,0,x,pa[x])); } int calc(int x) { return max(dfs2(a,0,x,pa[x]),dfs2(b,0,x,pa[x])); } main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>a>>b; for(int i=1;i<n;i++){ int x,y; cin>>x>>y; adj[x].push_back(y); adj[y].push_back(x); } dfs1(a,0); int t=b; vector<int>v; while(t!=a){ v.push_back(t); t=pa[t]; } // for(int i=1;i<=n;i++)cout<<dp[i]<<"\n"; int l=0,r=v.size(); int res=0; while(l<r){ int m=(l+r)/2; if(delta(v[m])>0){ l=m+1; } else r=m; } res=l; int sol=calc(v[res]); // cout<<v[res]<<" "<<pa[v[res]]<<"\n"; if(res>0)sol=min(sol,calc(v[res-1])); if(res<r-1)sol=min(sol,calc(v[res+1])); // if(res>1)sol=min(sol,calc(v[res-2])); // if(res<r-1)sol=min(sol,calc(v[res+2])); cout<<sol; return 0; }

Compilation message (stderr)

torrent.cpp: In function 'int dfs2(int, int, int, int)':
torrent.cpp:27:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i=0;i<tmp.size();i++){
      |                 ~^~~~~~~~~~~
torrent.cpp: At global scope:
torrent.cpp:40:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   40 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...