比赛 NOIP2023模拟赛2 评测结果 WWEEEEEEEE
题目名称 旅行者 最终得分 0
用户昵称 宇战 运行时间 1.550 s
代码语言 C++ 内存使用 9.71 MiB
提交时间 2023-11-14 11:39:25
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=5010;
int head[M],ver[M],edge[M],Next[M],tot,a[N],d[N][N],v[N];
int n,m,s,k;
priority_queue<pair<int,int> >q;
void add(int x,int y,int z){
    ver[++tot]=y;
    edge[tot]=z;
    Next[tot]=head[x];
    head[x]=tot;
}
void dj(int x){
    for(int i=1;i<=n;i++){
        d[x][i]=0x3f3f3f3f;
    }
    memset(v,0,sizeof(v));
    d[x][x]=0;
    q.push(make_pair(0,x));
    while(q.size()){
        int y=q.top().second;
        q.pop();
        if(v[y])continue;
        v[y]=1;
        for(int i=head[y];i;i=Next[i]){
            int x1=ver[i],x2=edge[i];
            if(d[x][x1]>d[x][y]+x2){
                d[x][x1]=d[x][y]+x2;
                q.push(make_pair(-d[x][x1],x1));
            }
        }
    }
}
int main(){
    freopen("WAW.in","r",stdin);
    freopen("WAW.out","w",stdout);
      int t;
      cin>>t;
      while(t--){
          tot=0;
          memset(head,0,sizeof(head));
          memset(ver,0,sizeof(ver));
          memset(edge,0x3f,sizeof(edge));
          memset(Next,0,sizeof(Next));
          memset(a,0,sizeof(a));
          s=0x3f3f3f3f;
          cin>>n>>m>>k;
          for(int i=1;i<=m;i++){
              int x,y,z;
              cin>>x>>y>>z;
              add(x,y,z);
          }
          for(int i=1;i<=k;i++){
              cin>>a[i];
              dj(a[i]);    
          }
          for(int i=1;i<=k;i++){
              for(int j=1;j<=k;j++){
                  if(i==j)continue;
                  if(d[i][j]!=0&&d[i][j]!=0x3f3f3f3f){
                      s=min(d[i][j],s);
                  } 
                  if(d[j][i]!=0&&d[j][i]!=0x3f3f3f3f){
                      s=min(d[j][i],s);
                  }
              }
          }
          cout<<s<<endl;
      }
      
}