仙人掌,一个一听就很屌的东西,其实真正做了做之后,发现也没有想象的那么难过天际,无非就是多个算法拼凑在一起罢了;
Acwing2866
嗦点,lca,做完了,主要是代码不好写,真正把代码写出来之后发现也还可以,代码没有想象的那么难;
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 12010, M = N * 3;
int n ,m , Q;
int h1[N], h2[N], e[M], w[M], ne[M], idx;
int dfn[N], low[N], cnt;
int s[N], stot[N], fu[N], fw[N];
int fa[N][14], depth[N], d[N];
int X, Y;
void add(int h[],int a,int b,int c) {
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}
void build_circle(int x,int y,int z) {
int sum = z;
for(int k = y;k!= x; k = fu[k]){
s[k] = sum;
sum += fw[k];
}
s[x] = stot[x] = sum;
add(h2,x, ++ new_n, 0);
for(int k=y;k != x;k = fu[k]) {
stot[k] = sum;
add(h2,new_n, k ,min(s[k], sum - s[k]));
}
}
void tarjan(int u,int from) {
dfn[u] = low[u] = ++cnt;
for(int i=h1[u];~i;i=ne[i]) {
int j = e[i];
if(!dfn[j]) {
</