Submission #1283123

#TimeUsernameProblemLanguageResultExecution timeMemory
1283123thuhienneTravelling Trader (CCO23_day2problem2)C++20
0 / 25
2 ms576 KiB
#include <bits/stdc++.h> using namespace std; #define re exit(0); int n,k; vector <int> adj[200009]; int gain[200009]; long long dp[200009],res; vector <int> sol; void dfs1(int node,int par) { dp[node] += gain[node]; res = max(res,dp[node]); for (auto x : adj[node]) if (x != par) { dp[x] = dp[node]; dfs1(x,node); } } void trace1(int node,int par) { sol.push_back(node); int maxchild = 0; for (auto x : adj[node]) if (x != par) { if (maxchild == 0 || dp[maxchild] < dp[x]) maxchild = x; } if (maxchild == 0) return; trace1(maxchild,node); } void dfs3(int node,int par) { res += gain[node]; sol.push_back(node); for (auto x : adj[node]) if (x != par) { for (auto y : adj[x]) if (y != node) { dfs3(y,x); } sol.push_back(x); } } int main() { ios_base::sync_with_stdio(0);cin.tie(nullptr); // freopen(".inp","r",stdin); // freopen(".out","w",stdout); cin >> n >> k; for (int i = 1;i < n;i++) { int u,v;cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (int i = 1;i <= n;i++) cin >> gain[i]; if (k == 1) { dfs1(1,-1); trace1(1,-1); } else { dfs3(1,-1); } cout << res << '\n' << sol.size() << '\n'; for (auto x : sol) cout << x << " "; }
#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...