易爆物D305

编程入门 行业动态 更新时间:2024-10-28 10:28:37

<a href=https://www.elefans.com/category/jswz/34/1767092.html style=易爆物D305"/>

易爆物D305

 

分析:典型的并查集,每一个物品合一看成一个独立的顶点,则一个简单化合物就是一条边,如果两个顶点x,y联通则说明有危险,所以可以用一个并查集来维护图的联通分量集合,并查集的详解有一篇写的很易懂的博客并查集详解,看完之后觉得别具一格,推荐给正在学习并查集的ACER们。

并查集主要是由保存上级的数组pre[],Find()函数,Join()函数进行实现,Find函数是用来查找元素的根节点,join函数用来连接两个节点,将联通分量合并为一个。

而在此题中,只需要使用Find函数查找两个元素x,y是否在同一个集合中,也就是时候构成了一种化合物, 并不用用到join函数进行合并。

上代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 
 4 int pa[100010];
 5 int x,y,n;
 6 
 7 inline int read(){
 8     int f = 1, x = 0;
 9     char ch;
10     do{
11         ch = getchar();
12         if(ch == '-') f  = -1;
13     }
14     while(ch < '0' || ch > '9');
15     do{
16         x = x * 10 + ch - '0';
17         ch = getchar();
18     }
19     while(ch <= '9' && ch >= '0');
20     return x * f;
21 }
22 
23 inline int Find(int x){
24     return pa[x]!=x?pa[x] = Find(pa[x]):x;
25 }
26 
27 int main(){
28     n = read();
29     for(int i = 0; i <= 100010; i ++) pa[i] = i;   
30     int ans = 0;
31     while(n --){
32        x = read();
33        y = read();
34        x = Find(x);
35        y = Find(y);
36        if(x == y) ans ++;
37        else pa[x] = y;
38     }
39     printf("%d", ans);
40     return 0;
41 }
代码快来拿!!!

 

转载于:.html

更多推荐

易爆物D305

本文发布于:2024-03-06 08:05:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714799.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:易爆

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!