4 条题解
-
0
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6+10; int n; int fa[N]; int a[N]; int find(int x){ return fa[x]==x ? x : fa[x] = find(fa[x]) ; } void unite(int x,int y){ fa[find(y)] = find(x); } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; fa[i]=i; } for(int i=1;i<=n;i++){ unite(i,a[i]); } vector<int> size(n+1,0); for(int i=1;i<=n;i++){ size[find(i)]++; } int ans = 0; for(int i=1;i<=n;i++){ ans = max(ans,size[i]); } for(int i=1;i<=n-1;i++){ int r1 = find(i); int r2 = find(i+1); if(r1!=r2){ ans = max(ans,size[r1]+size[r2]); } } cout<<ans; return 0; }
信息
- ID
- 608
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 428
- 已通过
- 139
- 上传者