NOIP2016 信息传递

来源:互联网 发布:北京洪浪网络诈骗案 编辑:程序博客网 时间:2024/05/17 00:52

看到数据200000后有些懵逼,然而写爆搜却过了。。。

#include<cstdio>#include<cstring>#define M 200000int tell[M+1],r[M+1];bool be[M+1],vis[M+1];int ans=2147483647;using namespace std;inline int gi() {int x=0;char ch=' ';while(ch==' '||ch=='\n')ch=getchar();while(ch!=' '&&ch!='\n')x=x*10+ch-'0',ch=getchar();return x;}inline void dfs(int n,int ak) {if(vis[n]) {if(ans>ak)ans=ak;return;}vis[n]=1;dfs(tell[n],ak+1);}int main() {memset(be,1,sizeof(be));int n=gi();bool flag=1;for(int i=1; i<=n; i++)tell[i]=gi(),r[tell[i]]++;while(flag){flag=0;for(int i=1; i<=n; i++)if(r[i]==0&&be[i])be[i]=0,flag=1,r[tell[i]]--;}for(int i=1; i<=n; i++)if(be[i]&&!vis[i])dfs(i,0);printf("%d",ans);return 0;}


0 0
原创粉丝点击