这个题我用DFS做的,但好像也可以不用,如果用DFS的话需要用到剪枝,否则会超时。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <map>
#include <vector>
#include <cstring>
#include <string>
using namespace std;
vector<int>mapp[300005];
int num[300005];
int maxx=0;
int f[300005];
void dfs(int depth,int x)
{
if(maxx<depth)
{
maxx=depth;
}
int len=mapp[x].size();
int i;
for(i=0; i<len; i++)
{
int next = mapp[x][i];
if(num[x]<num[next])
{
if(f[next]<f[x]+1)
{
f[next] = f[x]+1;
dfs(depth+1,next);
}
}
}
}
int main()
{
int ans=0;
int n,m,i;
int u,v;
scanf("%d%d",&n,&m);
for(int i=0; i<n; i++)
{
f[i] = 1;
}
for(i=0; i<m; i++)
{
scanf("%d%d",&u,&v);
mapp[u].push_back(v);
mapp[v].push_back(u);
}
for(i=0; i<n; i++)
{
num[i]=mapp[i].size();
}
for(i=0; i<n; i++)
{
maxx=0;
dfs(1,i);
if(ans<maxx)
{
ans=maxx;
}
}
printf("%d",ans);
}