Pagini recente » Cod sursa (job #1057813) | Cod sursa (job #1203808) | Cod sursa (job #1691113) | Cod sursa (job #1203954) | Cod sursa (job #2693075)
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
ifstream in ("darb.in");
ofstream out ("darb.out");
// două parcurgeri in lăţime/adâncime pornind cu prima parcurgere dintr-un nod oarecare şi continuând cu a doua din ultimul nod în care am ajuns.
vector<bool> viz;
vector<int> adiacenta[100010];
queue<int> coada;
int cost[100010];
int N,ultim,diam;
void bfs(int S)
{
memset(cost, -1, sizeof(cost));
viz.assign(N+1, false);
int nr_min_arce = 0;
coada.push(S);
cost[S] = 0;
while(!coada.empty())
{
int x = coada.front();
coada.pop();
for(auto i : adiacenta[x])///se parcurg vecinii lui x
if(!viz[i])
{
coada.push(i);
cost[i] = cost[x] + 1;
viz[i] = true;
diam = cost[i];
ultim = i;
}
}
}
int main()
{
int N;
in>>N;
int x,y;
while(in>>x>>y)
{
//graf neorientat;
adiacenta[x].push_back(y);
adiacenta[y].push_back(x);
//cout<<x<<" "<<y<<"\n";
}
bfs(1);
bfs(ultim);
out<<diam+1<<"\n";
return 0;
}