nyoj-115-城市平乱

来源:互联网 发布:女生铅笔袋淘宝 编辑:程序博客网 时间:2024/04/30 05:52
#include<stdio.h>
#define M 10000
int map[1002][1002];
int tp[102],n,m;
int DIJ(int q)
{
   
    int used[1002]={0},dis[1002]={0};
 int i,j,k,min;
    for(i=1;i<=m;i++)
    dis[i]=map[q][i];
    for(i=1;i<=m;i++)
    {
        min=M;
        for(j=1;j<=m;j++)
        if(used[j]==0&&min>dis[j])
        {
            min=dis[j];
            k=j;
        }
        used[k]=1;
        for(j=1;j<=m;j++)
        if(dis[j]>dis[k]+map[k][j])
        dis[j]=dis[k]+map[k][j];
    }
    min=M;
    for(i=0;i<n;i++)
    if(min>dis[tp[i]])
    min=dis[tp[i]];
    return min;
}
       
int main()
{
    int s,p,q;
    scanf("%d",&s);
    while(s--)
    {
        int i,j,k,a,b,c,min;
        scanf("%d%d%d%d",&n,&m,&p,&q);
        for(i=0;i<n;i++)
        scanf("%d",&tp[i]);
        for(i=1;i<=m;i++)
        for(j=1;j<=m;j++)
        map[i][j]=M;
        for(i=0;i<p;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(map[a][b]>c)
            map[a][b]=map[b][a]=c;
        }
        /*for(k=1;k<=m;k++)
        for(i=1;i<=m;i++)
        for(j=1;j<=m;j++)
        if(map[i][j]>map[i][k]+map[k][j])
        map[i][j]=map[i][k]+map[k][j];*/
       
        printf("%d\n",DIJ(q));
    }
    return 0;
}
0 0
原创粉丝点击