#include <bits/stdc++.h>   using namespace std;   inline void writeln2() { cout <<   n ; }   inline void writeln() { cout <<   n ; }   inline void readln() {}   template <typename T>   inline void read(T&);   template <typename T>   inline void priws(T);   template <typename T>   inline void print(T);   void err(vector<string>::iterator it) { ++it; }   template <typename Head, typename... Tail>   inline void readln(Head& head, Tail&... tail) {     read(head);     readln(tail...);   }   template <typename Head, typename... Tail>   inline void writeln2(Head head, Tail... tail) {     print(head);     writeln2(tail...);   }   template <typename Head, typename... Tail>   inline void writeln(Head head, Tail... tail) {     priws(head);     writeln2(tail...);   }   template <typename T>   inline void writeln_range(T f, T s) {     if (f != s)       for (auto i = f; i != s; ++i) writeln(*i);   }   template <typename Head, typename... Tail>   inline void err(vector<string>::iterator it, Head head, Tail... tail) {     writeln((*it).substr((*it)[0] ==    ),  = , head);     err(++it, tail...);   }   vector<string> split(const string& s, char c) {     vector<string> v;     stringstream ss(s);     string x;     while (getline(ss, x, c)) v.push_back(x);     return move(v);   }   void printAnsAndExit(long long ans) {     writeln(ans);     exit(0);   }   vector<vector<int>> g;   vector<bool> used;   int cc = 0;   int dfs(int u) {     used[u] = true;     int ok = 0;     for (int i = 0; i < (int)(g[u].size()); ++i)       if (!used[g[u][i]]) ok += dfs(g[u][i]);     if (ok >= 3)       cc += 2, ok = 0;     else {       if (ok == 2)         cc += 2, ok = 0;       else {         if (ok == 1) cc++;         ok = 1;       }     }     return ok;   }   void run() {     int n, x, y;     readln(n, x, y);     vector<pair<int, int>> a(n - 1);     readln(a);     vector<int> deg(n + 1, 0);     g.resize(n);     used.resize(n);     for (int i = 0; i < (int)(n - 1); ++i)       deg[a[i].first - 1]++, deg[a[i].second - 1]++,           g[a[i].first - 1].push_back(a[i].second - 1),           g[a[i].second - 1].push_back(a[i].first - 1);     if (x > y) {       for (int i = 0; i < (int)(deg.size()); ++i)         if (deg[i] == n - 1) printAnsAndExit(x + (n - 2) * 1ll * y);       printAnsAndExit((n - 1) * 1ll * y);     }     dfs(0);     writeln(cc * 1ll * x + (n - cc - 1) * 1ll * y);   }   int main() {     ios_base::sync_with_stdio(false);     run();     return 0;   }   template <typename T>   inline ostream& operator<<(ostream& os, vector<T>& _a);   template <typename T1, typename T2>   inline istream& operator>>(istream& is, pair<T1, T2>& _a) {     return is >> _a.first >> _a.second;   }   template <typename T1, typename T2>   inline ostream& operator<<(ostream& os, pair<T1, T2>& _a) {     return os << _a.first <<     << _a.second;   }   template <typename T>   inline ostream& operator<<(ostream& os, vector<T>& _a) {     if (_a.size())       os << _a[0];     else       os <<   n ;     for (int i = 1; i < _a.size(); ++i)       os <<   n  [is_fundamental<T>::value] << _a[i];     return os;   }   template <typename T>   inline istream& operator>>(istream& is, vector<T>& _a) {     if (_a.size() == 0) {       int _n;       is >> _n;       _a.resize(_n);     }     for (int i = 0; i < _a.size(); ++i) is >> _a[i];     return is;   }   template <typename T>   inline void print(T _a) {     cout <<     << _a;   }   template <typename T>   inline void priws(T _a) {     cout << _a;   }   template <typename T>   inline void read(T& _a) {     cin >> _a;   }