在访问某一点所在的并查集的属性的时候,要先使用求根函数。
原代码
void cal_ans() {
dfs_ans(1, -1);
int ans = 0;
for (int i = 1; i <= n; ++i) {
if (getfa(i) == i) {
assf(ans, sfad, sfml(sfdv(dp[1][0], sfml(dp[i][0], (i == 1 ? 1 : 2))), dp[i][1]));
}
}
printf("%d\n", ans);
return;
}
修改后代码
void cal_ans() {
dfs_ans(getfa(1), -1);
int ans = 0;
for (int i = 1; i <= n; ++i) {
if (getfa(i) == i) {
assf(ans, sfad, sfml(sfdv(dp[getfa(1)][0], sfml(dp[i][0], (F(i, 1) ? 1 : 2))), dp[i][1]));
}
}
printf("%d\n", ans);
return;
}