JZOJsenior4324.【NOIP2015提高组Day1】信息传递

来源:互联网 发布:commvault恢复sql 编辑:程序博客网 时间:2024/05/17 10:56

problem

Description

Input

Output

Sample Input

5
2 4 2 3 1

Sample Output

3

Data Constraint


analysis

明显,题目是要我们找一个最大环,输出最大环的大小即可

那么我们枚举从s点出发,遍历一次,若回到出现过了的点

  • 是这条路径上的点,那么更新答案return(dfs多带一个参数)
  • 不是这条路径上的点,直接return

每个点只会被遍历一次,那么时间复杂度就是O(n)


code

#include<cstdio>#include<cstring>using namespace std;int next[200001],bz[200001],deep[200001];int n,ans;int min(int x,int y){    return x<y?x:y;}void dfs(int x,int y,int z){    if (bz[x])    {        if (bz[x]==y)        {            ans=min(ans,z-deep[x]);            return;        }        else return;    }    else    {        bz[x]=y;        deep[x]=z;        dfs(next[x],y,z+1);    }}int main(){    freopen("message.in","r",stdin);    freopen("message.out","w",stdout);    scanf("%d",&n);    for (int i=1;i<=n;i++)    {        scanf("%d",&next[i]);    }    ans=0xfffffff;    for (int i=1;i<=n;i++)    if (!bz[i])    {        dfs(i,i,1);    }    printf("%d\n",ans);    return 0;}
原创粉丝点击