题目分析:
- 不难发现,附加边加进来就会出现环;
- 当主要边没有被覆盖,那么剪断这个主要边,就已经变为两截,则需随意剪一条附加边,则有m种方案
- 当主要边被覆盖一次,剪断这个主要边后,必须剪断对应的那条附加边,才能变为两截,故1种方案
- 若被覆盖多次,则无法打败
- 通过树上查分来维护边被覆盖次数
Code:
#include <bits/stdc++.h>
using namespace std;
#define maxn 100010
#define maxm 200010
int ans=0,n,m,size=0,w[maxn],head[maxn],f[maxn][30],dep[maxn];
struct egde {
int v,nxt;
}e[maxn<<1];
inline void init_() {
freopen("a.txt","r",stdin);
}
inline int read_() {
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<=