题目链接
题目大意:让你找一条路,使得这条路上的点的度,严格递增,问你能找到路的最大长度。
例如第一个样例的路为:2 5 4 1,长度为4
2 5 4 1的度分别为2 3 4 5(严格递增)
解题思路:dfs搜索+剪枝,不剪枝的话会超时(亲身经历)
ac代码:
#include <bits/stdc++.h>
using namespace std;
vector<int>e[100010];
int ans[100010];
int dfs(int u)
{
int i;
if(ans[u]==0)
{
ans[u]=1;
for(i=0; i<e[u].size(); i++)
if(e[e[u][i]].size()>e[u].size())
{
ans[u]=max(ans[u],dfs(e[u][i])+1);
}
}
return ans[u];
}
int main()
{
int n,m,i,x,y,maxn=0;
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&x,&y);
e[x].push_back(y);
e[y].push_back(x);
}
for(i=0; i<n; i++)
{
if(ans[i]==0)
{
dfs(i);
maxn=max(maxn,ans[i]);
}
}
printf("%d\n",maxn);
return 0;
}