求解为啥c题不过。。
哭辽
为什么c题过不去
有没有大佬解答一下
#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
long long fat[maxn],val[maxn];
bool flag[maxn];
int n,m;
vector<int> V;
int trace(int num){
return fat[num]==num?num:trace(fat[num]);
}
void combine(int a,int b){
int t_a=trace(a),t_b=trace(b);
if(t_a!=t_b){
fat[t_a]=t_b;
val[t_b]+=val[t_a];
return ;
}
}
int main(){
cin>>n>>m;
memset(fat,0,sizeof(fat));
memset(val,0,sizeof(val));
memset(flag,0,sizeof(flag));
for(int i=1;i<=n;i++) fat[i]=i;
for(int i=1;i<=n;i++) scanf("%lld",&val[i]);
for(int i=1;i<=n;i++){
int a; scanf("%d",&a);
combine(a,i);
}
for(int i=1;i<=n;i++){
trace(i);
if(flag[fat[i]]) continue;
else{
V.push_back(val[fat[i]]);
flag[fat[i]]=1;
}
}
sort(V.begin(),V.end());
int i=V.size();
long long res=0;
while(m--){
res+=V[--i];
if(i<=0) break;
}
cout<<res<<endl;
return 0;
}