Cod sursa(job #557061)

Utilizator cristiprgPrigoana Cristian cristiprg Data 16 martie 2011 13:59:55
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#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");
vector<int>G[DIM];
bitset<DIM>v(0);
int arb[DIM], n, T, adancime[DIM], cost[DIM];

void read()
{
	
	for (int i = 1; i <= n; ++i)
		v[i] = 0;
	
	fscanf(f, "%d", &n);
	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];
}

int main()
{
	read();
	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 && adancime[ arb[i] ] == adancime[ arb[1] ]; ++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 ", *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 );
	}
	
	printf("\nr = %d\n", cost[1]);
	
	return 0;
}