Submission #878720

#TimeUsernameProblemLanguageResultExecution timeMemory
878720Faisal_SaqibMousetrap (CEOI17_mousetrap)C++17
45 / 100
1571 ms149144 KiB
#include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; #define int long long const int N=1e6+2; set<int> ma[N]; int dp[N]; // dp[x] = def = what is the minimum number of step(Of Kalu ustad) return back to x,such that the subtree of x are the only cities you can go to int n,t,m; int from,to; vector<int> path,prefix; void find_path(int x,int p=-1) { prefix.push_back(x); if(to==x) { while(prefix.back()!=from) { path.push_back(prefix.back()); prefix.pop_back(); } int i=((int)path.size())-1; path.push_back(from); while(i>=0 and prefix.back()!=to) { prefix.push_back(path[i]); i--; } } for(auto y:ma[x]) if(y!=p) find_path(y,x); prefix.pop_back(); } void dfs(int x,int p=-1) { // cout<<"Component main ha "<<x<<endl; int total=0; for(auto y:ma[x]) { if(y!=p) { dfs(y,x); total++; } } int mx=0; int mx2=0; for(auto y:ma[x]) { if(y!=p) { if(dp[y]>mx) { mx2=mx; mx=dp[y]; } else if(dp[y]>mx2) { mx2=dp[y]; } } } dp[x]=mx2+total; } signed main() { cin>>n>>t>>m; for(int i=1;i<n;i++) { int x,y; cin>>x>>y; ma[x].insert(y); ma[y].insert(x); } from=t; to=m; find_path(from); long long ansp=0; int wela=0; // for(auto i:path) // cout<<i<<' '; // cout<<endl; for(int i=0;i+1<path.size();i++) { // Remove edge wela++; int x=path[i+1]; int y=path[i]; ma[x].erase(y); ma[y].erase(x); dfs(y); vector<int> apo; for(auto y:ma[y]) apo.push_back(dp[y]); sort(begin(apo),end(apo)); while(apo.size()>0 and wela>0) { ansp++; apo.pop_back(); wela--; } if(apo.size()==0) ansp+=0; else { ansp+=apo.back()+apo.size(); } } cout<<ansp<<endl; // cout<<endl; // cout<<dp[m]<<endl; // for(int i=1;i<=n;i++) // { // cout<<"for" <<i<<' '<<dp[i]<<endl; // } return 0; }

Compilation message (stderr)

mousetrap.cpp: In function 'int main()':
mousetrap.cpp:85:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |  for(int i=0;i+1<path.size();i++)
      |              ~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...