#include

#include

#include

#include

using namespace std;

```
const int maxN = 100010;
vector<int> a[maxN];
vector<int> x;
int mark[maxN];
int value[maxN];
int mini=10000000;
void dfs(int u)
{
mark=1;
if(value < mini && value>=0)
mini= value;
for(int i=a.size();i--;)
{
int v=a*;
if(!mark[v]) dfs(v);
}
}
int main()
{
int n,m,flag=0,minx=0;
scanf("%d%d",&n,&m);
int i,u,v;
long long sum=0;
for(i=0;i<n;i++) {
a*.clear();
mark*=0;
}
for(int k=0;k<m;k++)
{
scanf("%d%d",&u,&v);
a[u-1].push_back(v-1);
a[v-1].push_back(u-1);
}
for(i=0;i<n;i++) scanf("%d",&value*);
if(n<2)
{
printf("0
```

");

return 0;

}

```
for(i=0;i<n;i++)
{
if(!mark*)
{
mini=10000000;
dfs(i);
if(mini==10000000)
flag=1;
else
x.push_back(mini);
}
}
if(flag==1)
{
printf("-1
```

");

}

else

{

for(i=0;i<x.size();i++)

{

sum= sum+ x*;

if(x*<minx)minx= x*;

}

```
sum+= (x.size()-2)*minx;
printf("%lld
```

",sum);

```
}
return 0;
}
```