連接java
思路:web
實現:svg
#include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e5+5,mod=1e9+7; const int inf=0x3f3f3f3f; int n; vector<int> G[maxn]; int in[maxn],depth[maxn],f[maxn]; void dfs(int u,int fa=-1) { for(auto v: G[u]) { if(v==fa) continue; depth[v]=depth[u]+1; dfs(v,u); } } int main() { scanf("%d",&n); for(int i=1;i<=n-1;++i) { int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); in[u]++,in[v]++; } for(int i=1;i<=n;++i) if(in[i]==1) f[G[i][0]]++; int ans=n-1; for(int i=1;i<=n;++i) ans-=max(0,f[i]-1); dfs(1); bool a=false,b=false; for(int i=1;i<=n;++i) if(in[i]==1) if(depth[i]&1) a=true; else b=true; printf("%d %d\n",a&&b?3:1,ans); return 0; }