Submission #846659

#TimeUsernameProblemLanguageResultExecution timeMemory
846659vjudge1Torrent (COI16_torrent)C++17
100 / 100
441 ms37060 KiB
#include<bits/stdc++.h> using namespace std; const int N=3e5+5; int n,a,b; vector<int> g[N],vt[N],res; int dp[N]; bool ck[N]; pair<int,int> p; bool kt(int u,int v) { if(u==p.first && v==p.second) return false; if(u==p.second && v==p.first) return false; return true; } void dis(int u) { ck[u]=true; if(u==b){ dp[b]=1; res.push_back(b); return; } for(auto v:g[u]){ if(!ck[v]){ dis(v); dp[u]|=dp[v]; } } if(dp[u]) res.push_back(u); } void dfs(int u) { vt[u].clear(); dp[u]=1; for(auto v:g[u]){ if(dp[v]==0 && kt(u,v)){ dfs(v); vt[u].push_back(dp[v]); } } sort(vt[u].begin(),vt[u].end(),greater<int>()); for(int i=0;i<vt[u].size();i++) dp[u]=max(dp[u],vt[u][i]+1+i); } int main() { int now,ans=1e9; cin>>n>>a>>b; int x,y; for(int i=1;i<n;i++){ cin>>x>>y; g[x].push_back(y); g[y].push_back(x); } dis(a); if(n<=1000){ for(int i=0;i<res.size()-1;i++){ p={res[i],res[i+1]}; memset(dp,0,sizeof(dp)); dfs(a),dfs(b); now=max(dp[a]-1,dp[b]-1); ans=min(ans,now); } cout<<ans; return 0; } int lef=0,rig=res.size()-2,mid; while(lef<=rig){ mid=(lef+rig)/2; memset(dp,0,sizeof(dp)); p={res[mid],res[mid+1]}; dfs(a),dfs(b); if(dp[a]>dp[b]) rig=mid-1; else lef=mid+1; now=max(dp[a]-1,dp[b]-1); ans=min(ans,now); } cout<<ans; }

Compilation message (stderr)

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