加载中...

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上。改天一定要打打。

posted @ 2026-04-01 20:16  碎碎念的女巫  阅读(0)  评论(0)    收藏  举报