Pagini recente » Cod sursa (job #2271040) | Cod sursa (job #1696075) | Cod sursa (job #2361694) | Cod sursa (job #2160069) | Cod sursa (job #99566)
Cod sursa(job #99566)
using namespace std;
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
#define pb push_back
int n;
vector<vector<int> > a;
int start[100001], nrfii[100001];
int nrmaxfii[100001];
struct cmp{
bool operator()(const int &a, const int &b)const
{
if(nrmaxfii[a]>nrmaxfii[b]) return 1;
return 0;
}
};
inline void solve()
{
vector<int>::iterator it;
int i, j;
for(i=1;i<=n;++i) sort(a[i].begin(), a[i].end(), cmp());
start[1]=0;
int Q[100001], p=1, q=1;
bool use[100001];
memset(use, 0, sizeof(use));
use[1]=1;
Q[1]=1;
int u;
while(p<=q)
{
u=Q[p++];
for(it=a[u].begin(), i=1;it!=a[u].end();++it,++i)
{
start[*it]=start[u]+i;
Q[++q]=*it;
}
}
int max=0;
for(i=1;i<=n;++i)
if(max<start[i]+nrfii[i]) max=start[i]+nrfii[i];
printf("%d\n", max);
}
inline int dfs(int n)
{
if(!a[n].size()) return 1;
vector<int>::iterator i;
int sum=0;
for(i=a[n].begin();i!=a[n].end();++i)
sum+=dfs(*i);
nrmaxfii[n]=sum;
return sum;
}
int main()
{
int T, i, p, q;
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d\n", &T);
while(T--)
{
scanf("%d\n", &n);
a.clear();
a.resize(n+1);
memset(nrfii, 0, sizeof(nrfii));
memset(start, 0, sizeof(start));
for(i=1;i<n;++i)
{
scanf("%d %d\n", &p, &q);
a[p].pb(q);
++nrfii[p];
}
dfs(1);
// solve();
}
return 0;
}