题目评级不难。
感觉思路有值得借鉴的地方。(虽然少,毕竟积沙成塔吗qwq)
很容易看出来,是要求最小生成树的。
然后生成树的计算方式不一样。
我们考虑拼接(感觉大部分oi都可以使用类似的方法,即是先假设一部分已知,求另一部分)
我们已经知道了一颗不全的生成树,现在在往里添加点。
很显然,多出来的部分就是所添加的两点的点权加上二倍的边权(就是走两次)。
然后根绝上面。就可以写出算法。
不过开始点要多算一次。这个东西特判就好了。
#include#include #include #include using std::sort;using std::min;const int maxn=101000;int val[maxn];struct node{ int p1,p2; int val; void full(int a=0,int b=0,int c=0) { p1=a;p2=b;val=c; } bool operator <(const node &a)const { return val