21分求助

P3366 【模板】最小生成树

这一段写错了 ```cpp if (u != v) { ans += a[i].val; f[u] = v; cnt ++; } ``` 这里应当是确定两个点是否在同一连通块里,也就是判断 u 和 v 的祖先是否相同,所以应当写成: ```cpp int fu=find(u),fv=find(v) if (fu != fv) { ans += a[i].val; f[fu] = fv; cnt ++; } ```
by I_like_magic @ 2023-11-11 10:20:39


@[I_like_magic](/user/778235) OK谢谢
by pengziyippp @ 2023-11-11 10:25:10


@[pengziyippp](/user/845330) 还有一点需要注意,如果枚举到最后一条边时,图才能连通,那么你的代码在执行完最后一个 if后就会离开循环,输出 `orz`,所以在 `cout<<"orz";` 前还要判断 `cnt` 是否等于 `n-1`
by I_like_magic @ 2023-11-11 10:28:27


@[I_like_magic](/user/778235) 好的过了
by pengziyippp @ 2023-11-11 10:29:13


|