poj3471 - 倍增+LCA+树上差分
题意:一张n节点连通无向图,n-1条树边,m条非树边。若通过先删一条树边,再删一条非树边想操作 将此图划分为不连通的两部分,问有多少种方案。 利用LCA整好区间覆盖,dfs用来求前缀和 需要注意的是,覆盖数为1的时候才可以选择哦! 覆盖数为0,代表可以直接拆开 最后附上一张我老婆 #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #define maxn 110000 using namespace std ; typedef long long ll ; int dp [ maxn ][ 33 ]; int dep [ maxn ]; long long cnt [ maxn ]; //差分数组 int head [ 450100 ]; struct Node { int to ; int next ; } G [ 450100 ]; int cnn = 1 ; void insert ( int be , int en ) { G [ cnn ]. to = en ; G [ cnn ]. next = head [ be ]; head [ be ] = cnn ;; //头插法 cnn ++; } void dfs ( int u , int par ) { dep [