Pagini recente » Cod sursa (job #655596) | Cod sursa (job #1390805) | Cod sursa (job #1560609) | Cod sursa (job #1912595) | Cod sursa (job #1709616)
# include <bits/stdc++.h>
using namespace std;
# define fi cin
# define fo cout
# define x first
# define y second
# define ll long long
# define db long double
# define scn(x) scanf("%I64d",&x)
# define scan(x) scanf("%d",&x)
# define print(x) printf("%d ",x)
# define prnt(x) printf("%I64d ",x);
# define eol printf("\n")
# define IOS ios_base :: sync_with_stdio(0)
# define pe "Possible"
# define ie "Impossible"
# define halt(...) {fo << (__VA_ARGS__) << '\n';exit(0);}
# define rep(n) for (int qwerty = 1;qwerty <= n;++qwerty)
# define pp(n) cerr << #n << " = " << n << '\n'
# define ppp(v) for (auto it : v) cerr << it << ' ';cerr << '\n'
const int mod = 1e9 + 7;
vector < int > s[1 << 20];
int d[1 << 20];
void dfs(int node,int prev)
{
d[node] = d[prev] + 1;
for (auto it : s[node])
if (it != prev)
dfs(it,node);
}
int ok(int node,int n)
{
for (int i = 0;i <= n;++i) d[i] = 0;
dfs(node,0);
int mx = *max_element(d+1,d+1+n);
int cnt = 0;
for (int i = 1;i <= n;++i) cnt += d[i] == mx;
return (cnt > 1);
}
int main(void)
{
int t;
freopen("revolta.in","r",stdin);
ofstream fo("revolta.out");
scan(t);
while (t --)
{
int n;
scan(n);
for (int i = 1;i <= n;++i) s[i].clear();
for (int i = 1;i < n;++i)
{
int a,b;
scan(a);scan(b);
++a;++b;
s[a].push_back(b);
s[b].push_back(a);
}
for (int i = 0;i <= n;++i) d[i] = 0;
dfs(1,0);
int mx = max_element(d+1,d+1+n) - d;
int cnt = d[mx];
d[mx] = 0;
int M = max_element(d+1,d+1+n) - d;
for (int i = 0;i <= n;++i) d[i] = 0;
int ans = 1;
if (d[M] == cnt) ans &= ok(M,n) & ok(mx,n);
else ans &= ok(mx,n);
--cnt;
fo << max(1,ans ? cnt : cnt - 1) << '\n';
}
return 0;
}