#11
查看原帖
#11
1057034
Dark_into_Lie楼主2024/8/12 17:07
#include<bits/stdc++.h>
using namespace std;
#define PII pair<int,int>
const int N = 3e4 + 5;

int n,p,c,ans = 1e9;
int h[N],e[N],ne[N],w[N],idx,g[N],dis[N];
bool st[N];

void add(int u,int v,int c){
    e[idx] = v,ne[idx] = h[u],w[idx] = c,h[u] = idx++;
}

int Dijstra(int s){
    memset(dis,0x3f,sizeof(dis));
    memset(st,0,sizeof(st));
    priority_queue<PII,vector<PII>,greater<PII> > q;
    q.push({0,s});
    dis[s] = 0;
    while(q.size()){
        PII t = q.top();
        q.pop();
        st[t.second] = false;
        int u = t.second;
        for(int i = h[u];~i;i = ne[i]){
            int v = e[i];
            if(dis[v] > dis[u] + w[i]){
                dis[v] = dis[u] + w[i];
                if(!st[v]){
                    q.push({dis[v],v});
                    st[v] = true;
                }
            }
        }
    }
    long long sum = 0;
    for(int i = 1;i <= p;i++) sum += dis[i] * g[i];
    return sum;
}

int main(){
    memset(h,-1,sizeof(h));
    scanf("%d%d%d",&n,&p,&c);
    for(int i = 1;i <= n;i++){int x;scanf("%d",&x);g[x]++;}
    for(int i = 1;i <= c;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);add(y,x,z);
    }
    for(int i = 1;i <= p;i++){ans = min(ans,Dijstra(i));}
    printf("%d\n",ans);
    return 0;
}
2024/8/12 17:07
加载中...