Pagini recente » Cod sursa (job #306323) | Cod sursa (job #2647078) | Cod sursa (job #1638465) | Cod sursa (job #2511612) | Cod sursa (job #1706555)
#include <iostream>
#include <fstream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
struct node{
vector<int> fii;
int tata = 0;
}arbore[100005];
int n, x, y, frunza, lungime=0, contor=0;
void DFS(int i, int distanta)
{
if( arbore[i].fii.size() ){
for(int j=0; j<arbore[i].fii.size(); j++){
DFS(arbore[i].fii[j], distanta+1);
}
}else{
if(distanta>lungime){
frunza=i;
lungime=distanta;
}
}
}
void DFS2(int i, int distanta){
if(arbore[i].tata != 0){
for(int j=0;j< arbore[arbore[i].tata].fii.size();j++)
{
if(arbore[arbore[i].tata].fii[j] != i)
{
contor++;
DFS(arbore[arbore[i].tata].fii[j], distanta+2);
};
}
DFS2(arbore[i].tata, distanta+1);
}else{
if(!contor)
lungime=n;
}
}
int radacina(){
srand (time(NULL));
int k = rand() % n + 1;
while(arbore[k].tata){
k=arbore[k].tata;
}
return k;
}
int main()
{
ifstream f ("darb.in");
ofstream g ("darb.out");
f>>n;
while(f>>x>>y)
{
arbore[x].fii.push_back(y);
arbore[y].tata=x;
}
DFS(radacina(), 1);
cout<<lungime;
lungime = 0;
DFS2(frunza, 1);
cout<<lungime;
g<<lungime;
return 0;
}