제출 #1154087

#제출 시각아이디문제언어결과실행 시간메모리
1154087dzuizzSjekira (COCI20_sjekira)C++20
10 / 110
1097 ms4168 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
constexpr int MAXN=100005;
int n,res,t[MAXN],pa[MAXN],val[MAXN];
pair<int,int> e[MAXN];
int find(int x){ return pa[x]==x?x:pa[x]=find(pa[x]); }
void merge(int a,int b){
  a=find(a),b=find(b);
  if(a==b) return;
  pa[b]=a,res+=val[a]+val[b];
  val[a]=max(val[a],val[b]);
}
signed main(){
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  // Subtask 1
  cin>>n;
  for(int i=0;i<n;++i) cin>>t[i];
  for(int i=0;i<n-1;++i){
    cin>>e[i].first>>e[i].second;
    --e[i].first,--e[i].second;
  }
  int a[n-1],ans=3e18;
  iota(a,a+n-1,0);
  do{
    iota(pa,pa+n,0);
    for(int i=0;i<n;++i) val[i]=t[i];
    res=0;
    for(int i=0;i<n-1;++i){
      auto&[u,v]=e[a[i]];
      merge(u,v);
    }
    /*if(res<ans){
      for(auto&x:a)cout<<x<<" ";
      cout<<'\n';
    }*/
    ans=min(ans,res);
  }while(next_permutation(a,a+n-1));
  cout<<ans<<'\n';
  return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...