P7299 [USACO21JAN] Dance Mooves S
思维上的完全胜利,代码实现上的完全失败。
这题我的思路是完全没有问题的。在这里简而言之是它会形成若干个环,环内所有的地方都能互相到达。
从代码实现上,只会模拟 \(O(n^2)\)(大概是建图遍历)但实际上,我们可以使用vector记录每一个节点,再使用并查集维护环。
for(int i = 1; i <= n; i++)
v[a[i]].pb(i);
for(int i = 1; i <= n; i++)
fa[find(i)] = find(a[i]); //把两个点放到一个环
for(int i = 1; i <= n; i++){
for(int j = 0; j < v[a[i]].size(); j++){
ans[find(a[i])].insert(v[a[i]][j]); //统计每个点的途径环有多少节点。
}
}
我感觉这个代码实现应该是我以前没用过的,弱点可能在绕并查集和set上。改天一定要打打。

浙公网安备 33010602011771号