2023-11-10
省流:Floyd 写成 ijk
案发地点
CF475B Strongly Connected City
挂分代码
for (int i = 1; i <= tot; i++)
for (int j = 1; j <= tot; j++)
for (int k = 1; k <= tot; k++)
f[i][j] |= f[i][k] & f[k][j];
挂分后果
duel 因耽误时间失败。
#2854: _YXJS_ 负 Error_Yuan
on 475B(*1400)
From 2023-11-10 15:05:53 to 2023-11-10 15:12:27, lasted for 0:06:34
挂分原因
Floyd 枚举顺序应该为先枚举中间转移点即 $k,i,j$。
正确代码
for (int k = 1; k <= tot; k++)
for (int i = 1; i <= tot; i++)
for (int j = 1; j <= tot; j++)
f[i][j] |= f[i][k] & f[k][j];
2023-11-11
省流:DSU 路径压缩写错
案发地点
挂分代码
int F(int u) { return fa[u] ^ u ? son[fa[u] = F(fa[u])].push_back(u), fa[u] : u; }
挂分后果
6 发罚时,perf 2k+ -> perf 1k5,甚至掉了 5 分。
挂分原因
并查集路径压缩一定是在同一棵子树内进行的,不需要反复 push 自己到祖先上。
正确代码
int F(int u) { return fa[u] ^ u ? fa[u] = F(fa[u]) : u; }
2023-11-19
省流:根号分治既有 $b$ 又有 $B$
案发地点
挂分代码
else if (sz[a] >= B && sz[B] < B) // 大小
挂分后果
满屏黄色的 WA,哈哈。
挂分原因
$B$ 是根号分治的阈值,$b$ 是读入,大小写打反了。
正确代码
else if (sz[a] >= B && sz[b] < B) // 大小
1 条评论
[...]开 F。发现 F 就是个沙比并查集啊,一个集合内都是可以构造的,不同集合合并的时候启发式一下就行,至多合并 $n\log n$ 次。觉得很对。但是路径压缩写错了,参见 挂分笔记 | 警钟撅烂 | 教你如何优雅地挂分。[...]