蒟蒻求助,#11测试点没过
查看原帖
蒟蒻求助,#11测试点没过
514736
钟禹衡123楼主2022/8/30 22:19
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
    int x=0;
    bool flag=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-')
        {
            flag=0;
        }
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        x=(x<<1)+(x<<3)+c-'0';
        c=getchar(); 
    }
    return (flag?x:~(x-1));
}
inline void write(int x)
{
	if(x<0)
	{
		putchar('-');
		x=-x;
	}
	if(x>9)
	{
		write(x/10);
		putchar(x%10+'0');
	}else
	{	
		putchar(x+'0');
	}
	return; 
}
int ei=0,h[16010];
struct edge
{
	int to,v,next;
}e[16010];
inline void add(int x,int y,int v)
{
	ei++;
    e[ei].to=y;
    e[ei].v=v;
    e[ei].next=h[x];
    h[x]=ei;
    return;
}
int dis[16010],u[16010];
inline void spfa(int f)
{
	memset(dis,0x3f,sizeof(dis));
	dis[f]=0;
	queue<int>qu;
	qu.push(f);
	u[f]=1;
	while(!qu.empty())
	{
		int f1=qu.front();
		qu.pop();
		u[f1]=0;
		for(int i=h[f1];i;i=e[i].next)
		{
			int to=e[i].to;
			int v=e[i].v;
			if(dis[to]>dis[f1]+v)
			{
				dis[to]=dis[f1]+v;
				if(u[to]==0)
				{
					qu.push(to);
					u[to]=1;
				}
			}
		}
	}
}
int n,p,c,A[8010];
signed main()
{
	n=read(),p=read(),c=read();
	for(register int i=1;i<=n;i++)
	{
		A[i]=read();
	}
	int a,b,d;
	for(register int i=1;i<=c;i++)
	{
		a=read(),b=read(),d=read();
		add(a,b,d);
		add(b,a,d);
	}
	int sum=0,ans=214748364;
	for(register int i=1;i<=p;i++)
	{
		spfa(i);
		sum=0;
		for(register int j=1;j<=n;j++)
		{
			sum+=dis[A[j]];
		}
		ans=min(ans,sum);
	}
	write(ans);
	return 0;
}
2022/8/30 22:19
加载中...