描述
n个结点,用n-1条边建立树。
现在添加m条边。n-1条边中切断一条树边,m条边中也切断一条边,求切割后,能够使这个无向图不再连通的切割方案数。
注:即使只切断一条树边就可以使图不连通,你也需要再切断m中的一条边。
输入描述
第一行包含两个整数 n 和 m;
之后 n - 1 行,每行包括两个整数 a 和 b,表示 a 和 b 之间有一条主要边;
之后 m 行以同样的格式给出附加边。
输出描述
输出方案数。
样例输入 1
4 1 1 2 2 3 1 4 3 4
样例输出 1
3
提示
数据范围与提示:
2≤n≤50,000,1≤m≤100,000
#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
struct node
{
int u, v, nxt;
} edge[maxn << 1];
int deep[maxn], head[maxn], cnt, lp[maxn][30], p[maxn];
void add(int u, int v)
{
++cnt;
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].nxt = head[u];
head[u] = cnt;
}
void dfs1(int u, int fa)
{
deep[u] = deep[fa] + 1;
lp[u][0] = fa;
for (int