func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MOD = 1000000007;   const long long INF = 1000000000;   template <class T>   T read(T &x) {     char c;     int flag = 1;     while ((c = getchar()) <  0  || c >  9 )       if (c ==  - ) flag *= -1;     x = c -  0 ;     while ((c = getchar()) >=  0  && c <=  9 ) x = x * 10 + c -  0 ;     x *= flag;     return x;   }   int dep[100005];   int fa[100005];   vector<int> adj[100005];   void dfs(int x, int f) {     for (int i : adj[x]) {       if (i == f) continue;       fa[i] = x;       dep[i] = dep[x] + 1;       dfs(i, x);     }   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     int n, k;     cin >> n >> k;     for (int i = 1; i < n; ++i) {       int u, v;       cin >> u >> v;       adj[u].push_back(v);       adj[v].push_back(u);     }     dfs(1, -1);     int root = 1;     for (int i = 1; i <= n; ++i)       if (dep[root] < dep[i]) root = i;     memset(dep, 0, sizeof dep);     ;     dfs(root, -1);     int tar = root;     for (int i = 1; i <= n; ++i)       if (dep[tar] < dep[i]) tar = i;     vector<int> v;     while (tar != root) {       v.push_back(tar);       tar = fa[tar];     }     v.push_back(root);     if (v.size() != (k << 1) + 1) return cout <<  No  << endl, 0;     memset(dep, 0, sizeof dep);     ;     root = v[k];     dfs(root, -1);     for (int i = 1; i <= n; ++i) {       if (dep[i] == k) continue;       int sz = adj[i].size() - 1 + (root == i);       if (sz < 3) return cout <<  No  << endl, 0;     }     cout <<  Yes  << endl;   }   