Pagini recente » Cod sursa (job #2238687) | Cod sursa (job #1152132) | Cod sursa (job #2261962) | Cod sursa (job #1582975) | Cod sursa (job #1424868)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("darb.in");
ofstream g("darb.out");
int n,m,c[100000],viz[1000000],d[1000000],p,u,tata[1000000],et[1000000];
vector <int> a[1000000];
void bf(int x,int &y)
{
int i,j;
while(p<=u)
{i=c[p];
//cout<<"c["<<p<<"]="<<c[p]<<endl;
// cout<<i<<" "<<endl;
for(j=0;j<a[i].size();j++)
if(viz[a[i][j]]==0)
{u++;
c[u]=a[i][j];
//cout<<"c["<<u<<"]="<<c[u]<<endl;
viz[a[i][j]]=1;
tata[a[i][j]]=i;
d[a[i][j]]=d[tata[a[i][j]]]+1;}
p++;}
y=c[u];
}
void bf_niv(int x,int &y)
{
int i,j,niv=1,max=0;
for(i=1;i<=n;i++)
viz[i]=0;
viz[x]=1;
et[x]=0;
while(p<=u)
{i=c[p];
//cout<<i<<" ";
for(j=0;j<a[i].size();j++)
if(viz[a[i][j]]==0)
{u++;
c[u]=a[i][j];
viz[a[i][j]]=1;
et[a[i][j]]=niv;
}
if(et[c[p]]!=et[c[p+1]])
niv++;
p++;}
y=c[u];
for(i=1;i<=n;i++)
{if(max<et[i])
max=et[i];
// cout<<"et["<<i<<"]="<<et[i]<<endl;
}
g<<max;
/* cout<<endl<<"Centrul: ";
if(max%2==1)
{p=max/2;
u=max/2+1;
for(i=1;i<=n;i++)
{if(et[i]==p)
cout<<i<<" ";
if(et[i]==u)
cout<<i<<" ";}
}
else
{p=max/2+1;
for(i=1;i<=n;i++)
if(et[i]==p)
cout<<i<<" ";
} */
}
int main()
{
int x,y,i,j;
int t,t1,t2;
f>>n>>m;
for( i=1; i<=m; i++)
{f>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for(i=1;i<=n;i++)
if(a[i].size() == 1){ t=i; i=n+1;}
p=u=t;
viz[t]=1;
c[p]=t;
d[t]=0;
bf(t,t1);
p=u=t1;
c[p]=t1;
d[t1]=0;
cout<<endl;
bf_niv(t1,t2);
return 0;
}