Pagini recente » Cod sursa (job #2171448) | Cod sursa (job #693698) | Cod sursa (job #2466866) | Cod sursa (job #1730468) | Cod sursa (job #1094879)
#include <fstream>
#include <vector>
#include <queue>
#define NMax 100010
using namespace std;
int ans;
int n;
vector <int> G[NMax];
bool viz[NMax];
int d[NMax];
int last, level_last;
void Read()
{
ifstream f ("darb.in");
f>>n;
for (int i = 1; i < n ; ++ i)
{
int x, y; f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
f.close();
}
void BFS(const int start)
{
queue <int> Q;
Q.push(start);
viz[start] = true;
d[start] = 1;
while (!Q.empty())
{
int node = Q.front(); Q.pop();
for (vector <int> :: iterator it = G[node].begin(); it!=G[node].end(); ++it)
if (!viz[*it])
{
viz[*it] = true;
d[*it] = d[node] + 1;
if (d[*it] > level_last)
{
level_last = d[*it];
last = *it;
}
Q.push(*it);
}
}
}
void BFS2(const int start)
{
queue <int> Q;
Q.push(start);
viz[start] = false;
for (int i = 1; i<=n; ++i)
d[i] = 0;
d[start] = 1;
while (!Q.empty())
{
int node = Q.front(); Q.pop();
for (vector <int> :: iterator it = G[node].begin(); it != G[node].end(); ++it)
if (viz[*it])
{
viz[*it] = false;
d[*it] = d[node] + 1;
ans = max(ans, d[*it]);
Q.push(*it);
}
}
}
inline void Write()
{
ofstream g("darb.out");
g<<ans<<"\n";
g.close();
}
int main()
{
Read();
BFS(1);
BFS2(last);
Write();
return 0;
}