076

DS HW3

076
Apr 28th, 2024 (edited)
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<vector<int>> a(100001);
  4. vector<int> val(100001),pre(100001);
  5. long long ans,level;
  6. long long dfs(int i){
  7.     if(a[i].size()==0){
  8.         if(val[i]>ans){
  9.             ans=val[i];
  10.             level=i;
  11.         }
  12.         return val[i];
  13.     }
  14.     long long big1=0,big2=0,temp=0;
  15.     for(int j:a[i]){
  16.         temp=dfs(j);
  17.         if(big1<temp||big2<temp) if(big1<big2) big1=temp; else big2=temp;
  18.     }
  19.     if(big1+big2+val[i]>ans) ans=big1+big2+val[i],level=i;
  20.     return max(big1,big2)+val[i];
  21. }
  22. int main(){
  23.     int n,t,x,y,z,head;
  24.     cin>>n>>t;
  25.     cin>>head>>y;
  26.     val[head]=y;
  27.     pre[head]=-1;
  28.     while(n--){
  29.         cin>>x>>y>>z;
  30.         pre[y]=x;
  31.         a[x].emplace_back(y);
  32.         val[y]=z;
  33.     }
  34.     string s;
  35.     while(t--){
  36.         cin>>s;
  37.         if(s=="Check"){
  38.             ans=-9223372036854775808;
  39.             if(a[head].size()>0) dfs(head); else ans=val[head];
  40.             cout<<"Maximum Value: "<<ans<<"\nRoot of the Path: "<<level<<'\n';
  41.         }else if(s=="Add"){
  42.             cin>>x>>y>>z;
  43.             pre[y]=x;
  44.             a[x].emplace_back(y);
  45.             val[y]=z;
  46.         }else if(s=="Delete"){
  47.             cin>>y;
  48.             x=pre[y];
  49.             if(x<0) continue;
  50.             for(auto t=a[x].begin();t<a[x].end();t++){
  51.                 if((*t)==y){
  52.                     a[x].erase(t);
  53.                     for(int i:a[y]){
  54.                         a[x].emplace_back(i);
  55.                         pre[i]=x;
  56.                     }
  57.                     break;
  58.                 }
  59.             }
  60.             a[y].clear();
  61.             val[y]=0;
  62.             pre[y]=0;
  63.         }
  64.     }
  65.     ans=-9223372036854775808;
  66.     dfs(head);
  67.     cout<<"Final Root: "<<level<<'\n';
  68.     return 0;
  69. }
  70. /*
  71. CS2351_DS_24Spring_HW3
  72. https://acm.cs.nthu.edu.tw/contest/2986/
  73. NTHU OJ 14291 - Run Away!!
  74. AC code
  75. 2024 April 28
  76. */
Advertisement
Add Comment
Please, Sign In to add comment