#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;
}
