Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define forr(i, a, b) for(int i=(int)(a);i<(int)(b);i++)
- #define forn(i,n) forr(i,0,n)
- #define dforn(i,n) for(int i=(int)(n-1);i>=0;i--)
- #define forall(it, v) for(auto it=v.begin();it!=v.end();it++)
- #define pb push_back
- typedef long long ll;
- const int MAXN=200050;
- ll c[MAXN];
- int n,m;
- vector<int> G[MAXN];
- bool used[MAXN];
- ll dfs(int v, int p){
- used[v]=true;
- ll ans=c[v];
- forn(i,G[v].size()){
- int w=G[v][i];
- if(w==p) continue;
- if(used[w]) continue;
- ans=min(ans,dfs(w,v));
- }
- return ans;
- }
- int main() {
- //~ freopen("F.in", "r", stdin);
- while(scanf("%d%d",&n,&m)>=1){
- memset(used,false,sizeof(used));
- forn(i,MAXN)G[i].clear();
- forn(i,n){
- scanf("%lld",&c[i]);
- }
- forn(i,m){
- int a,b;
- scanf("%d%d",&a,&b);
- --a;--b;
- G[a].pb(b);
- G[b].pb(a);
- }
- ll ans=0;
- forn(i,n){
- if(!used[i]){
- ans+=dfs(i,-1);
- }
- }
- printf("%lld\n",ans);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement