Submission #1154013

#TimeUsernameProblemLanguageResultExecution timeMemory
1154013i271828Sjekira (COCI20_sjekira)C++20
110 / 110
859 ms27024 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int,int> using namespace std; const int MAX=100005; int N=5; //vector<int> adj[MAX]={{1},{0,2},{1,3},{2,4},{3}}; vector<int> adj[MAX]; int A[MAX]={3,1,4,1,5}; bool vis[MAX]; int P[MAX]; set<int> C[MAX]; int root=-1; /* 5 5 2 3 1 4 2 1 3 1 2 4 2 5 */ void dfs_tree(int i,int p){ int x=p; int prevx=-1; while (x!=-1&&A[x]<=A[i]) prevx=x, x=P[x]; if (x==-1){ if (root!=-1){ C[i].insert(root); P[root]=i; } root=i; P[i]=-1; }else{ P[i]=x; C[x].insert(i); if (prevx!=-1){ C[x].erase(prevx); C[i].insert(prevx); P[prevx]=i; } } for (auto v:adj[i]){ if (v==p) continue; dfs_tree(v,i); } } ll calc(int i){ ll ans=0; vis[i]=true; for (auto x:C[i]){ if (vis[x]) continue; ans+=A[i]+A[x]; //cout<<i<<' '<<x<<'\n'; auto y=calc(x); ans+=y;; } return ans; } int main(){ //* cin>>N; for (int i=0;i<N;i++) cin>>A[i]; for (int i=0;i<N-1;i++){ int a,b; cin>>a>>b; a--,b--; adj[a].push_back(b); adj[b].push_back(a); } /**/ dfs_tree(0,-1); //for (int i=0;i<N;i++) cout<<i<<' '<<P[i]<<'\n'; cout<<calc(root); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...