Day1 T1 通信
通信
一场天灾过后,B市的所有主干道路都被切断了。
灾后重建的一项重要任务是恢复通信。B市共有n个关键的据点,而我们现在有一条关键的消息,需要所有的据点都要收到。
消息的传递有两种方式:
空降:可以直接将消息传给某个据点,每次需要的代价为 v。
通信员:可以将消息从一个据点传到另一个据点,需要的代价为两个据点在地图上的欧氏距离的平方。
注意,通信员只能从已有消息的据点传递消息到另一个据点。所以,至少第一个收到消息的据点一定是通过空降的。
在保证所有的据点都收到消息的前提下,最小的总代价是多少?
输入格式
输入的第一行包含空格隔开的两个数n, v。
接下来n行,每行有两个空格隔开的数x, y,表示每个据点在地图上的坐标。
输出格式
输出一行,仅包含一个整数,表示最小的总代价。
数据范围
测试点中的n的大小分布为:
1,5,9,13,17,50,300,1000,3000,5000
对于所有数据,保证
\(0 \leq v \leq 1000000\)
\(0 \leq x, y \leq 300000\)
求最小总代价
最小生成树prim
prim优势:题目要求"吸"点,与prim类似
cin>>n>v;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
for(int i=1;i<=n;i++)
d[i]=v;
for(int k=1;k<=n;k++)
{
int c=-1;
for(int u=1;u<=n;u++)
if(!chosen[u]&&c==-1||d[c]>d[u])
c=u;
chosen[c]=true;
ans+=d[c];
for(int v=1;v<=n;v++)
if(d[v]>dis(c,v))
d[v]=dis(c,v);
}

浙公网安备 33010602011771号