Mai intai trebuie sa te autentifici.
Cod sursa(job #352440)
Utilizator | Data | 1 octombrie 2009 19:23:07 | |
---|---|---|---|
Problema | Zvon | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.37 kb |
// Catalin Balan
// Thu Oct 1 18:24:22 EEST 2009
// Zvon - Infoarena
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 100002
#define CHUNK 8192
#define FIN "zvon.in"
#define FOUT "zvon.out"
char g_buf[CHUNK];
int g_p=CHUNK-1;
inline int get(FILE *f)
{
int x = 0;
while (g_buf[g_p] < '0' || g_buf[g_p] > '9')
if (++g_p == CHUNK) { fread(g_buf,1,CHUNK,f); g_p=0; }
while (g_buf[g_p] >= '0' && g_buf[g_p] <= '9') {
x = x*10 + g_buf[g_p]-'0';
if (++g_p == CHUNK) { fread(g_buf,1,CHUNK,f); g_p=0; }
}
return x;
}
vector<int> tree[NMAX];
int answ[NMAX];
int auxV[NMAX];
int n;
void solve(int node)
{
int i,nr,cost;
nr = tree[node].size();
for (i = 0; i < nr; ++i)
{
solve(tree[node][i]);
}
for (i = 0; i < nr; ++i)
{
auxV[i]=answ[tree[node][i]];
}
sort(auxV,auxV+nr);
answ[node]=0;
for (i = nr-1, cost = 1; i >= 0; --i, ++cost)
{
if (answ[node]<cost+auxV[i])answ[node]=cost+auxV[i];
}
}
int main(int argv, char ** argc)
{
FILE *f = fopen(FIN, "r");
FILE *g = fopen(FOUT, "w");
int t,i,a,b;
t = get(f);
for (int test = 1; test<= t; ++test)
{
n = get(f);
for (i = 1; i <= n; ++i)
tree[i].clear();
for (i = 1; i < n; ++i)
{
a = get(f);
b = get(f);
tree[a].push_back(b);
}
solve(1);
fprintf(g,"%d\n",answ[1]);
}
fclose(f);
fclose(g);
return EXIT_SUCCESS;
}