讨论区的如下代码竟然可以通过:
void dfs(int d,int f){
size[d]=1;
dep[d]=dep[f]+1;
if(d!=root) depn[dep[d]]++;
for(auto u:g[d]){
if(u==f) continue;
dfs(u,d);
size[d]+=size[u];
if(d==root){
for(int i=3;i<N;i++){
if(depn[i]==0) break;
ans+=(depn[i]*(depn[i]-1));
}
memset(depn,0,sizeof depn);
}
}
}
显然可以被卡到 n2。构造方法很简单,仅需造一组全部的 fa[i] = 1
的数据即可。
为了防止乱搞 / 特判,也可以加一些随机扰动。测试数据里竟然没有根的度数很大的情况,实在太水了。