#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[u]=1;
if(value[u] < mini && value[u]>=0)
mini= value[u];
for(int i=a[u].size();i--;)
{
int v=a[u][i];
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[i].clear();
mark[i]=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[i]);
if(n<2)
{
printf("0\n");
return 0;
}
for(i=0;i<n;i++)
{
if(!mark[i])
{
mini=10000000;
dfs(i);
if(mini==10000000)
flag=1;
else
x.push_back(mini);
}
}
if(flag==1)
{
printf("-1\n");
}
else
{
for(i=0;i<x.size();i++)
{
sum= sum+ x[i];
if(x[i]<minx)minx= x[i];
}
sum+= (x.size()-2)*minx;
printf("%lld\n",sum);
}
return 0;
}
```