次小生成树
次小生成树裸题。
先求出最小生成树,然后写个倍增算出最小生成树边的最大和次大值。最后求LCA的时候更新答案就好了。
次小生成树一定是最小生成树换了一条边。
代码:
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 400005
#define M 400005
#define F inline
using namespace std;
typedef long long LL;
struct edg{ int x,y,z; }e[M];
struct edge{ int next,to,dis; }ed[N<<1];
int n,m,k,p,h[N],dep[N],ffa[N],fa[N][20],mx1[N][20],mx2[N][20];
bool f[M]; LL ans,ret=0x7fffffff;
F char readc(){
static