提交时间:2024-06-04 16:24:47

运行 ID: 150485

#include<bits/stdc++.h> using namespace std; int n,p,c,i,j,x,y,t,minl,head,tail,tot,u; int a[801][801],b[501],dis[801],num[801],w[801][801],team[1601]; bool exist[801]; int main() { cin>>n>>p>>c; for(i=1;i<=p;i++) { b[i]=0; num[i]=0; for(j=1;j<=p;j++) w[i][j]=0x7fffffff/3; } for(i=1;i<=n;i++) cin>>b[i]; for(i=1;i<=c;i++) { cin>>x>>y>>t; w[x][y]=w[y][x]=t; a[x][++num[x]]=y; a[y][++num[y]]=x; } minl=0x7fffffff/3; for(i=1;i<=p;i++) { for(j=1;j<=p;j++) dis[j]=0x7fffffff/3; memset(team,0,sizeof(team)); memset(exist,false,sizeof(exist)); dis[i]=0;team[1]=i;head=0;tail=1;exist[i]=true; do { head++; head=((head-1)%1601)+1; u=team[head]; exist[u]=false; for(j=1;j<=num[u];j++) if(dis[a[u][j]]>dis[u]+w[u][a[u][j]]) { dis[a[u][j]]=dis[u]+w[u][a[u][j]]; if(!exist[a[u][j]]) { tail++; tail=((tail-1)%1601)+1; team[tail]=a[u][j]; exist[a[u][j]]=true; } } }while(head!=tail); tot=0; for(j=1;j<=n;j++) tot+=dis[b[j]]; if(tot<minl) minl=tot; } cout<<minl; return 0; }