题目 题解 标程: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=50003; struct kk{ int x,id; }a[N]; ll ans,mn; int n,i,vis[N]; bool cmp(kk x,kk y){ return x.x<y.x; } ll solve(int k){ ll Min=a[k].x,sum=a[k].x; int p=a[k].id,cnt=0; vis[k]=1; while (p!=k){ sum+=a[p].x; vis[p]=1; p=a[p].id; cnt++; } return sum+min(Min*(cnt-1),mn*(cnt+2)+Min); } int main(){ scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i].x),a[i].id=i; sort(a+1,a+n+1,cmp); mn=a[1].x; for (i=1;i<=n;i++) if (!vis[i]) ans+=solve(i); printf("%lld",ans); }