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...