Gyan @ 2021-11-14 21:37:42
萌新刚学淀粉质
学的 froggy 题解的双指针写法
我的 AC 代码: 100代码
inline int getroot(int);//返回重心
inline void calc(int);//计算答案
void dfz(int x) {//淀粉质
// x = getroot(x);
calc(x);
del[x] = 1;//标记删除
for (rg int e=head[x], y=to[e]; e; y=to[e=nxt[e]]) {
if (del[y]) continue;
dfz(getroot(y));
}
}
int main() {
//输入...
dfz(getroot(1));
//输出...
return 0;
}
上面的代码是没问题的
但是我又把它改成了这样: 60代码
inline int getroot(int);//返回重心
inline void calc(int);//计算答案
void dfz(int x) {
x = getroot(x);//把根节点更新为重心
calc(x);
del[x] = 1;//标记删除
for (rg int e=head[x], y=to[e]; e; y=to[e=nxt[e]]) {
if (del[y]) continue;
dfz(y);
}
}
int main() {
//输入...
dfz(1);
//输出...
return 0;
}
然后最后三个点就 T 飞了...
(实测 #7 要跑 7 秒)
求问大佬这是为什么....
by chen_qian @ 2021-11-14 21:40:10
@Gyan 你点分治不找重心吗?
by Gyan @ 2021-11-14 22:11:34
@chen_qian getroot
就是返回重心啊,我注释里写了 /kk
by chen_qian @ 2021-11-15 07:28:28
@Gyan 你的60分代码里找了吗
by Gyan @ 2021-11-15 07:35:29
@chen_qian 60分的就是我把找重心放到点分治函数的最前面了