题目链接:https://codeforces.com/contest/17/problem/B
每个点留下最小花费的上司,看最后是不是只有一个根节点。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
static const int MAXN=1e3+10;
int q[MAXN];
int n,m,u,v,w;
int cost[MAXN];
bool vis[MAXN];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&q[i]);
scanf("%d",&m);
memset(cost,0x3f,sizeof(cost));
for(int i=0;i<m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(q[u]>q[v])
{
cost[v]=min(cost[v],w);
vis[v]=true;
}
}
int res=0,cnt=0;
for(int i=1;i<=n;i++)
if(vis[i]) res+=cost[i];
else cnt++;
if(cnt==1) printf("%d\n",res);
else puts("-1");
return 0;
}