4 条题解
题解与来源题共享。已有题解默认通过;新增或编辑后需由来源域管理员审核。待审核、驳回题解仅作者和审核管理员可见。来源域:system
-
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
- 难度
- 普及
- 标签
- 递交数
- 437
- 已通过
- 141
- 上传者