1
0

CodeForces-1027D.cpp 638 B

1234567
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <limits>
  4. #include <queue>
  5. #include <vector>
  6. using namespace std;
  7. int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin>>n;vector<int>cost(n),to(n),in(n);for(int&x:cost)cin>>x;for(int&i:to){cin>>i;--i;++in[i];}queue<int>q;vector<bool>removed(n),seen(n);for(int i=0;i<n;++i)if(in[i]==0)q.push(i);while(!q.empty()){int u=q.front();q.pop();removed[u]=true;if(--in[to[u]]==0)q.push(to[u]);}long long ans=0;for(int s=0;s<n;++s)if(!removed[s]&&!seen[s]){int u=s,best=numeric_limits<int>::max();do{seen[u]=true;best=min(best,cost[u]);u=to[u];}while(u!=s);ans+=best;}cout<<ans<<'\n';}