这里学会使用vector<int>::iterator it的使用
http://blog.csdn.net/lv_zj/article/details/16113741
#include <iostream>
#include <vector>#include <algorithm>
#include <queue>
using namespace std;
class A
{
public:
enum{N=10001};
void init();
void run();
int gettreelevel(int c,int f);
void gettreelevel();
int getcomponentcout();
int n,maxlev,treelev[N];
vector<int> ar[N];
};
int A::getcomponentcout()
{
int count=1,i,k;
queue<int> qu;
bool visited[N];
fill_n(visited,n+1,false);
qu.push(1);
while(1)
{
while(!qu.empty())
{
k=qu.front();qu.pop();
visited[k]=true;
vector<int>::iterator it;
for(it=ar[k].begin();it!=ar[k].end();it++)
{
if(!visited[*it]) qu.push(*it);
}
}
for(i=1;i<=n;i++)
{
if(!visited[i])
{
count++;
qu.push(i);
break;
}
}
if(i>n) break;
}
return count;
}
void A::gettreelevel()
{
int i,tl;
for(i=1;i<=n;i++)
{
tl=gettreelevel(i,-1);
treelev[i]=tl;
}
maxlev=*(max_element(treelev+1,treelev+n+1));
for(i=1;i<=n;i++)
{
if(treelev[i]==maxlev) cout<<i<<endl;
}
}
int A::gettreelevel(int c,int f)
{
int mlv=1,lv;
vector<int>::iterator it;
for(it=ar[c].begin();it!=ar[c].end();it++)
{
if(*it==f) continue;
lv=gettreelevel(*it,c)+1;
if(lv>mlv) mlv=lv;
}
return mlv;
}
void A::init()
{
cin>>n;
int i;
for(i=0;i<n-1;i++)
{
int r1,r2;
cin>>r1>>r2;
ar[r1].push_back(r2);
ar[r2].push_back(r1);
}
}
void A::run()
{
init();
int ccount=getcomponentcout();
if(ccount>1)
{
cout<<"Error: "<<ccount<<" components";
}
else
{
gettreelevel();
}
}
int main()
{
// freopen("test.in","r",stdin);
A *a=new A;
a->run();
return 0;
}