Pagini recente » Cod sursa (job #2436926) | Cod sursa (job #1384137) | Cod sursa (job #3304125) | Cod sursa (job #1013338) | Cod sursa (job #2040850)
/*
I love you Rose
I hope you love me too
*/
#include<bits/stdc++.h>
using namespace std;
class InParser {
private:
FILE *fin;
char *buff;
int sp;
char read_ch() {
++sp;
if (sp == 4096) {
sp = 0;
fread(buff, 1, 4096, fin);
}
return buff[sp];
}
public:
InParser(const char* nume) {
fin = fopen(nume, "r");
buff = new char[4096]();
sp = 4095;
}
InParser& operator >> (int &n) {
char c;
while (!isdigit(c = read_ch()) && c != '-');
int sgn = 1;
if (c == '-') {
n = 0;
sgn = -1;
} else {
n = c - '0';
}
while (isdigit(c = read_ch())) {
n = 10 * n + c - '0';
}
n *= sgn;
return *this;
}
InParser& operator >> (long long &n) {
char c;
n = 0;
while (!isdigit(c = read_ch()) && c != '-');
long long sgn = 1;
if (c == '-') {
n = 0;
sgn = -1;
} else {
n = c - '0';
}
while (isdigit(c = read_ch())) {
n = 10 * n + c - '0';
}
n *= sgn;
return *this;
}
};
InParser f("zvon.in");
ofstream g("zvon.out");
int t,a,b;
int n,ar[100003];
bool wm[100003];
vector<int>v[100003];
vector<int>ar2;
void dfs1(int nod)
{
ar[nod]=0;
int m=v[nod].size();
if(m==0){
ar[nod]=1;
return;
}
for(int i=0;i<m;++i)
{
dfs1(v[nod][i]);
ar[nod]+=ar[v[nod][i]];
}
}
int dfs2()
{
int t=0;
int d=1;
while(d<n)
{
++t;
int prvs=ar2.size();
for(int i=0;i<prvs;++i)
{
int max1=0;
int who=0;
int d1=v[ar2[i]].size();
for(int j=0;j<d1;++j)
if(wm[v[ar2[i]][j]]==0)
if(ar[v[ar2[i]][j]]>max1)
max1=ar[v[ar2[i]][j]],who=v[ar2[i]][j];
if(who!=0){
++d;
ar2.push_back(who);
wm[who]=1;
}
}
}
return t;
}
int main()
{
f>>t;
for(;t;--t)
{
f>>n;
for(int i=1;i<=n;++i)
v[i].clear();
memset(wm,0,100002);
ar2.clear();
for(int i=1;i<n;++i)
{
f>>a>>b;
v[a].push_back(b);
}
dfs1(1);
ar2.push_back(1);
g<<dfs2()<<'\n';
}
return 0;
}