#include using namespace std; using ll=long long; //#define int ll #define rep(i,a,b) for(int i=a;i<(b);i++) #define sz(x) (int)(x).size() #define all(x) begin(x), end(x) using pii=pair; using vi=vector; #define fi first #define se second #define pb push_back signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int n; cin >> n; vector> g(n); for(int u, v, i = 1; i < n; i++) { cin >> u >> v; --u, --v; g[u].push_back(v); g[v].push_back(u); } vector C; auto find_centroids = [&](auto self, int v, int p) -> int { int sz = 1, mx = 0; for(auto i : g[v]) if(i != p){ int t = self(self, i, v); sz += t; mx = max(mx, t); } mx = max(mx, n - sz); if(2 * mx <= n) C.push_back(v); return sz; }; auto dfs = [&](auto self, int v, int p) -> int { int sz = 1; vector ch; for(auto i : g[v]) if(i != p) { int t = self(self, i, v); if(t == -1) { return -1; } ch.push_back(t); } sort(all(ch)); for(auto s : ch) { // cout << v << " " << s << endl; if(s > sz) return -1; sz += s; } // cout << v << " -- " << sz << endl; return sz; }; find_centroids(find_centroids, 0, 0); for(auto c : C) { if(dfs(dfs, c, c) != -1) { cout << "YES\n"; exit(0); } } cout << "NO\n"; }