Submission #259771

#TimeUsernameProblemLanguageResultExecution timeMemory
259771MKopchevChase (CEOI17_chase)C++14
100 / 100
783 ms166368 KiB
#include<bits/stdc++.h> using namespace std; const int nmax=1e5+42,vmax=1e2+5; int n,put; vector<int> adj[nmax]; long long sum[nmax],inp[nmax]; long long dp[2][vmax][nmax];//0-> up, 1-> down long long outp; void dfs(int node,int par) { //cout<<"dfs "<<node<<" "<<par<<endl; //dp[0][1][node]=sum[node]; dp[1][1][node]=sum[node]; for(auto k:adj[node]) if(k!=par) { dfs(k,node); for(int j=1;j<=put;j++) { long long add_1=max(dp[0][j][k],dp[0][j-1][k]+sum[k]-inp[node]); outp=max(outp,dp[1][put-j][node]+add_1); long long add_2=max(dp[1][j][k],dp[1][j-1][k]+sum[node]-inp[k]); outp=max(outp,dp[0][put-j][node]+add_2); } for(int j=put;j>=1;j--) { long long add_1=max(dp[0][j][k],dp[0][j-1][k]+sum[k]-inp[node]); long long add_2=max(dp[1][j][k],dp[1][j-1][k]+sum[node]-inp[k]); dp[0][j][node]=max(dp[0][j][node],add_1); dp[1][j][node]=max(dp[1][j][node],add_2); } for(int j=0;j<=put;j++) { outp=max(outp,dp[0][j][node]); outp=max(outp,dp[1][j][node]); } } /* cout<<"node= "<<node<<endl; for(int j=0;j<=put;j++)cout<<dp[0][j][node]<<" ";cout<<endl; for(int j=0;j<=put;j++)cout<<dp[1][j][node]<<" ";cout<<endl; */ } int main() { scanf("%i%i",&n,&put); for(int i=1;i<=n;i++) scanf("%lld",&inp[i]); for(int i=1;i<n;i++) { int u,v; scanf("%i%i",&u,&v); adj[u].push_back(v); adj[v].push_back(u); sum[u]+=inp[v]; sum[v]+=inp[u]; } dfs(1,0); printf("%lld\n",outp); return 0; }

Compilation message (stderr)

chase.cpp: In function 'int main()':
chase.cpp:63:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%i",&n,&put);
     ~~~~~^~~~~~~~~~~~~~~~
chase.cpp:66:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",&inp[i]);
         ~~~~~^~~~~~~~~~~~~~~~
chase.cpp:71:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i%i",&u,&v);
         ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...