并查集/DFS-CodeForces 1027D-Mouse Hunt 淩亂°似流年 2022-05-15 12:09 140阅读 0赞 * # 并查集/DFS-CodeForces 1027D-Mouse Hunt # -------------------- * ## 题目链接: ## ### [D. Mouse Hunt][] ### * ## 题目基础:并查集 ## ### [数据结构-并查集][-] ### * ## 思路: ## ### 题目大意: ### 给定两个N长度序列,第一个序列表示在每个房间安装捕鼠器的成本,第二个序列是状态图,***表示在第 i 个房间的老鼠,下一秒会去到房间 Next\_Room\[i\] (可以选择停留在该房间)***,求出一定能捉到老鼠的最小成本 ### 题解: ### 怎样放捕鼠器才能让老鼠一定被捉到?其实就是放在老鼠在房间中活动形成的环路,想要最小成本,**在每个环中选出安装捕鼠器成本最低的房间** 那要怎么检查老鼠活动是否成环?用到并查集,如果**检查的两个元素在一个集合中,说明成环(两种成环状态,自环-当老鼠停留在原来房间,或者多房间成环)** 然后用***深搜找出每个环安装捕鼠器的最小成本*** * ### 代码: ### #include<bits/stdc++.h> using namespace std; #define MAX_SIZE 200005 int Node[MAX_SIZE]; int Height[MAX_SIZE]; int Burles[MAX_SIZE]; int Next_Room[MAX_SIZE]; int Judge[MAX_SIZE]; void Init(int n) //初始化结点 { for(int i=0;i<=n;i++) { Node[i]=-1; Height[i]=0; Judge[i]=0; } } int Find(int x) //查找集合根 { if(Node[x]==-1) return x; else return Node[x]=Find(Node[x]); //查找到x的根时,将x直接连到根 } int Combine(int a,int b) //a b 符合某种关系需合并,如果a b本同属一个集合,返回0 { int a_root=Find(a); int b_root=Find(b); if(a_root==b_root) return 0; if(Height[a_root]<Height[b_root]) //小树a放在b下 Node[a_root]=b_root; else { Node[b_root]=a_root; if(Height[a_root]==Height[b_root]) Height[a_root]++; } return 1; } int DFS(int x,int y) { if(x==y) return Burles[x]; return min(DFS(Next_Room[x],y),Burles[x]); } int main() { int n; int Res=0; cin>>n; Init(n); for(int i=1;i<=n;i++) scanf("%d",&Burles[i]); for(int i=1;i<=n;i++) { scanf("%d",&Next_Room[i]); if(!Combine(i,Next_Room[i])) //两个房间已在集合内,说明有成环情况,标记 Judge[i]=1; } for(int i=1;i<=n;i++) { if(Judge[i]) Res+=DFS(Next_Room[i],i); } cout<<Res<<endl; return 0; } [D. Mouse Hunt]: http://codeforces.com/problemset/problem/1027/D [-]: https://blog.csdn.net/SZU_Crayon/article/details/81986258
相关 并查集 Ⅱ \[poj 1611\] ([http://poj.org/problem?id=1611][http_poj.org_problem_id_1611]) 题目描述: T 古城微笑少年丶/ 2022年08月03日 14:35/ 0 赞/ 253 阅读
相关 并查集 并查集JAVA版框架 并查集是一种用来管理元素分组情况的数据结构。 并查集可以高效地进行如下操作: \--查询元素a和元素b是否属于同一组 落日映苍穹つ/ 2022年06月16日 12:44/ 0 赞/ 287 阅读
相关 并查集 这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧 并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的 港控/mmm°/ 2022年06月13日 14:13/ 0 赞/ 276 阅读
相关 并查集 > 题目 > 某学校近期要组织全校同学出去参加某项活动,由于人数众多,学校决定让同学们自行组队,以小组为单位进行活动。假设学校一共n个同学,每个同学有一个唯一的数字作为标签 Myth丶恋晨/ 2022年06月08日 09:24/ 0 赞/ 286 阅读
相关 并查集/DFS-CodeForces 1027D-Mouse Hunt 并查集/DFS-CodeForces 1027D-Mouse Hunt -------------------- 题目链接: [D. Mouse H 淩亂°似流年/ 2022年05月15日 12:09/ 0 赞/ 141 阅读
相关 并查集 森林: 森林是由若干棵互不相交的树组成,两棵树分别独立,没有交集 ![20181112082744488.png][] 并查集: 并查集的结构和森林十分相似,是 Love The Way You Lie/ 2022年04月17日 02:27/ 0 赞/ 345 阅读
相关 并查集 来看一个实例,[杭电1232畅通工程][1232] 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性 我就是我/ 2022年03月29日 10:58/ 0 赞/ 338 阅读
相关 并查集 并查集 并查集是对树的一种操作,旨在找到某个节点的公共祖先(最老公共祖先)。我们先讲一下并。 并 并就是讲两个节点合并到一个集合里面(这个集合必须是树),每个节点 谁践踏了优雅/ 2021年12月15日 11:33/ 0 赞/ 372 阅读
相关 并查集 一、算法解释 用于解决一些有N个元素的集合应用问题。 1、将每个元素初始化为自身单独成为一个集合。用p\[i\]的值表示该元素所在集合。 ![这里写图片描述][S 桃扇骨/ 2021年09月14日 02:56/ 0 赞/ 446 阅读
相关 并查集 并查集的作用就是快速判断两个元素是否在同一个集合中,快速将两个集合合并 基本模板 include <iostream> include <a 比眉伴天荒/ 2021年06月22日 15:37/ 0 赞/ 538 阅读
还没有评论,来说两句吧...