蓝桥杯撞题NOIP原题,做法也一模一样(撞题:NOIP2013提高组 货车运输)
由题意可得这是让我们先求一个最大生成树(把求最小生成树反过来求即可),再求最小边权。
求最大生成树我们可以用并查集+排序做出。
求最小边权我们可以LCA,也可以树链剖分+线段树维护。后者码量太大(本人太懒),没打算写。
代码:
#include<cstdlib>
#include<cstdio>
#include<cctype>
typedef long long LL;
typedef unsigned long long ULL;
namespace FastIo{
typedef __uint128_t L;
static char buf[100000],*p1=buf,*p2=buf,fw[100000],*pw=fw;
#define gc p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++
inline void pc(const char &ch){
if(pw-fw==100000)fwrite(fw,1,100000,stdout),pw=fw;
*pw++=ch;
}
#define fsh fwrite(fw,1,pw-fw,stdout),pw=fw
struct FastMod{
FastMod(ULL b):b(b),m(ULL((L(1)&l