RT 
这道题:P1505 [国家集训队]旅游
代码太长就贴一部分,就是在更新边权的时候不去找相连的两个点中较小的点连边,而是记录每一条双向边(实际实现是两条单向边)所下放的节点编号,然后更新:
void dfs1(int u)
{
size[u] = 1;
for(int i = first[u]; i; i = Next[i])
{
int v = to[i];
if(dep[v])
{
continue;
}
num[v] = w[i];
bel[i] = bel[i ^ 1] = v;
fa[v] = u;
dep[v] = dep[u] + 1;
dfs1(v);
size[u] += size[v];
if(!hson[u] || size[hson[u]] < size[v])
{
hson[u] = v;
}
}
return;
}
(就是那个 bel)
T.updateval(1, dfn[bel[x << 1]], w); 然后这么调用(updateval 是写对了的,dfn 就是 dfs 序)。
结果不开 -O2 AC,开了就 WA on #12。
lz 要去睡觉了,大概率明天才会看这个帖子,请各位直接 @ 我。