#include using namespace std; const int DIM = 2e5 + 5; int n; vector v[DIM]; int sz[DIM]; void dfs(int nod = 1, int papa = 0) { sz[nod] = 1; for (auto it : v[nod]) { if (it == papa) continue; dfs(it, nod); sz[nod] += sz[it]; } } vector find_c() { vector cs; for (int i = 1; i <= n; ++i) { int sum = 0, mx = 0; for (auto it : v[i]) { if (sz[it] > sz[i]) continue; mx = max(mx, sz[it]); sum += sz[it]; } sum += 1; if (mx <= n / 2 && n - sum <= n / 2) cs.push_back(i); } return cs; } bool verify(int nod, int papa = 0) { sz[nod] = 1; vector w; for (auto it : v[nod]) { if (it == papa) continue; bool ok = verify(it, nod); if (!ok) return false; w.push_back(sz[it]); } sort(w.begin(), w.end()); for (auto it : w) { if (it > sz[nod]) return false; sz[nod] += it; } return true; } int main() { cin.tie(NULL); ios::sync_with_stdio(false); cin >> n; for (int i = 2; i <= n; ++i) { int x, y; cin >> x >> y; v[x].push_back(y); v[y].push_back(x); } dfs(1); vector cs = find_c(); bool ok = false; for (auto it : cs) { ok |= verify(it); } if (ok) cout << "YES\n"; else cout << "NO\n"; return 0; }