Pagini recente » Cod sursa (job #301294) | Cod sursa (job #841332) | Cod sursa (job #841112) | Cod sursa (job #368123) | Cod sursa (job #557300)
Cod sursa(job #557300)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <bitset>
using namespace std;
#define DIM 100005
#define pb push_back
#define IT vector<int>::iterator
FILE *f = fopen("zvon.in", "r"), *fout = fopen("zvon.out", "w");
vector<int>G[DIM];
bitset<DIM>v(0);
int arb[DIM], n, T, adancime[DIM], cost[DIM];
void read()
{
fscanf(f, "%d", &n);
for (int i = 1; i <= n; ++i)
v[i] = 0, cost[i] = 0, adancime[i] = 0, G[i].clear();
for (int i = 1, x, y; i < n; ++i)
fscanf(f, "%d%d", &x, &y), G[x].pb(y);
}
void DFS(int i, int a)
{
v[i] = 1;
adancime[i] = a;
for (IT it = G[i].begin(); it != G[i].end(); ++it)
if (!v[*it])
DFS(*it, a+1);
}
bool cmp(int i, int j)
{
return adancime[i] > adancime[j];
}
bool cmp2(int i, int j)
{
return cost[i]>cost[j];
}
void solve()
{
read();
if (n == 1)
{
fprintf(fout, "0\n");
return;
}
DFS(1,0);
for (int i = 1; i <= n; ++i)
arb[i] = i;
sort(arb+1, arb+n+1, cmp);
int i;
for (i = 1;i <= n; ++i)
{
sort(G[ arb[i] ].begin(), G[ arb[i] ].end(), cmp2);
/*
printf("%d: ", arb[i]);
for (IT it = G[ arb[i] ].begin(); it != G[ arb[i] ].end(); ++it) printf("(%d %d)", *it, cost[*it]);
printf("\n");
*/
int j = 1, max = 0;
for (IT it = G[ arb[i] ].begin(); it != G[ arb[i] ].end(); ++it, ++j)
if (max < j + cost[ *it ])
max = j + cost[ *it ];
cost[arb[i]] = max;
printf("cost[%d] = %d\n",arb[i], max );
}
fprintf(fout,"%d\n", cost[1]);
}
int main()
{
fscanf(f, "%d", &T);
for (int t = 1; t <= T; ++t)
solve();
return 0;
}