Pagini recente » Cod sursa (job #3259365) | Cod sursa (job #557061)
Cod sursa(job #557061)
#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;
}