#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mx = 2e5+5;
ll n, x, y, deg[mx], dp[mx][2];
vector<ll> adj[mx];
void dfs(int cur, int prev) {
ll sm = 0;
vector<ll> ch(2);
for (int nxt: adj[cur]) if(nxt != prev) {
dfs(nxt, cur);
sm += dp[nxt][0];
ch.push_back(dp[nxt][1] - dp[nxt][0]);
}
nth_element(ch.begin(), ch.begin()+1, ch.end());
dp[cur][1] = sm + ch[0];
dp[cur][0] = 1 + sm + ch[0] + ch[1];
}
int main() {
cin >> n >> x >> y;
for (int i=1; i<n; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
deg[u]++, deg[v]++;
}
if (x >= y) {
for (int i=1; i<=n; i++) {
if (deg[i] == n-1) {
cout << x + (n-2) * y << "\n";
return 0;
}
}
cout << (n-1) * y << "\n";
return 0;
}
dfs(1, 0);
cout << ((dp[1][0] - 1) * y) + ((n-dp[1][0]) * x) << "\n";
}
701. Insert into a Binary Search Tree | 429. N-ary Tree Level Order Traversal |
739. Daily Temperatures | 647. Palindromic Substrings |
583. Delete Operation for Two Strings | 518. Coin Change 2 |
516. Longest Palindromic Subsequence | 468. Validate IP Address |
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |
436. Find Right Interval | 435. Non-overlapping Intervals |
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |
274. H-Index | 260. Single Number III |
240. Search a 2D Matrix II | 238. Product of Array Except Self |
229. Majority Element II | 222. Count Complete Tree Nodes |