Submission #242329

#TimeUsernameProblemLanguageResultExecution timeMemory
242329dantoh000Magic Tree (CEOI19_magictree)C++14
14 / 100
83 ms7800 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n,m,k; int p[100005]; vector<int> G[100005]; int a[100005]; int L[100005]; int V[100005][2]; ll dp[100005][2]; bool isline = 1; long long LEAFANS = 0; void dfs(int u){ dp[u][0] = dp[u][1] = 0; for (auto v: G[u]){ dfs(v); dp[u][0] += dp[v][0]; dp[u][1] += dp[v][1]; } dp[u][0] += V[u][0]; dp[u][1] += V[u][1]; dp[u][0] = max(dp[u][0],dp[u][1]); } int main(){ scanf("%d%d%d",&n,&m,&k); for (int i = 2; i <= n; i++){ scanf("%d",&p[i]); G[p[i]].push_back(i); if (p[i] != i-1) isline = false; } for (int i = 0; i < m; i++){ int v,d,w; scanf("%d%d%d",&v,&d,&w); a[v] = d; LEAFANS += w; V[v][d-1] += w; } if (k <= 2){ dfs(1); printf("%lld\n",dp[1][0]); } else if (isline){ int ans = 0; for (int i = 0; i <= n; i++) L[i] = 1000000005; for (int i = n; i >= 1; i--){ if (a[i] == 0) continue; int pos = upper_bound(L,L+ans,a[i])-L; //printf("%d goes %d\n",a[i],pos); L[pos] = a[i]; ans = max(ans,pos+1); } printf("%d\n",ans); } else printf("%lld\n",LEAFANS); }

Compilation message (stderr)

magictree.cpp: In function 'int main()':
magictree.cpp:25:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d",&n,&m,&k);
     ~~~~~^~~~~~~~~~~~~~~~~~~
magictree.cpp:27:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&p[i]);
         ~~~~~^~~~~~~~~~~~
magictree.cpp:33:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d%d",&v,&d,&w);
         ~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...