Untitled
unknown
plain_text
5 years ago
1.1 kB
6
Indexable
#include <bits/stdc++.h>
#define pll pair<ll, ll>
#define ll long long
#define pb push_back
#define in(n) scanf("%lld", &n)
#define deb(n) cout << #n << n << endl
#define fo(i, a, b) for (ll i = a; i < b; i++)
#define fon(i, a, b) for(ll i =a; i<=b; i++)
#define vpll vector<pll>
#define F first
#define S second
using namespace std;
const ll mx = 1e5;
vector<ll> g[mx + 1];
bool vis[mx + 1];
void dfs(ll i) {
if (vis[i]) return;
vis[i] = 1;
for (auto v : g[i])
dfs(v);
}
void solve(){
vpll qu;
ll n, q, u, v, a;
in(n);
in(q);
qu.push_back({0, 0});
fon(i, 1 ,n){
in(a);
qu.push_back({a, i});
}
sort(qu.begin(), qu.end());
fo(i, 0, q){
in(u);
in(v);
g[u].pb(v);
g[v].pb(u);
}
ll cnt = 0;
fon(i, 1, n){
if(!vis[qu[i].S]){
cnt+=qu[i].F;
dfs(qu[i].S);
//cout<<qu[i].S<<" "<<qu[i].F<<" "<<cnt<<endl;
}
}
printf("%lld", cnt);
}
int main(void) {
int t =1;
//in(t);
while(t--){
solve();
}
}
Editor is loading...