虚树
将树压缩成若干个有用的点 for ( int i = 0 ; i < k ; ++ i ) { int f = lca ( stk [ r ] , h [ i ] ) ; while ( r && id [ f ] < id [ stk [ r - 1 ] ] ) { g1 . add ( stk [ r - 1 ] , stk [ r ] , get ( stk [ r ] , stk [ r - 1 ] ) ) ; -- r ; } if ( f ^ stk [ r ] ) g1 . add ( f , stk [ r ] , get ( stk [ r ] , f ) ) , -- r ; if ( f ^ stk [ r ] ) stk [ ++ r ] = f ; stk [ ++ r ] = h [ i ] ; ] P2495 [SDOI2011]消耗战 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望。已知在其他k个岛屿上有丰富能源,为了防止敌军获取能源,我军的任务是炸毁一些桥梁,使得敌军不能到达任何能源丰富的岛屿。由于不同桥梁的材质和结构不同,所以炸毁不同的桥梁有不同的代价,我军希望在满足目标的同时使得总代价最小。 侦查部门还发现