您的位置:首页 > 其它

NOIP2015信息传递

2017-07-11 10:00 190 查看

可以去Luogu上看着道题

先看一下一下样例:

Sample Input:
5
2 4 2 3 1


Sample Output:
3


可以认为是这样的

1->2
2->4
3->2
4->3
5->1


然后我们发现若抽象成图。

图中有一个环
(2->4->3->2)
,大小正好是3。

可以推知:环内的人必定在环的大小单位时间后得到自己的信息。

所以直接找最小环

But, n<=2∗105

一个个人找环时间复杂度最大为O(n2)

我们发现:

找一个环,还上每个人都会遍历到。

所以可以并查集排除重复的或记下经过的人。

参考代码:

int n,ans=0x3f3f3f3f,g[200010],f[200010];
int getf(int x)
{
rt f[x]=(x==f[x]?x:getf(f[x]));
}
int main(){
n=read();
fr(i,1,n)
g[i]=read();
fr(i,1,n)
f[i]=i;
fr(i,1,n)
f[i]=getf(g[i]);
fr(i,1,n)
if(i==____)
{
int k=g[i],t=1;
while(k!=i)
{
k=g[k];
t++;
}
ans=__________;
}
printf("%d\n",ans);
rt 0;
}


送大家两个空去填
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: