X-Plosives

uvaLive 3644:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1645

题意::每个化合物都是有两种元素组成的,如果车上存在k个简单化合物时,如果它和已装车的化合物形成易燃物的话,你就应该拒绝装车,否则装车,输出没有装车的个数

题解:一开始以为是与车上所有的化合物,所以直接用数组模拟打了一发。后来发现,是只要和部分化合物在一起,如果满足易暴就不行。白书上是用并查集。发现,这样的转化思想很巧妙。化合物作为一条边连接两个点,然后只要判断所有的连通分量中是否出现环就可以了,直接用并查集判断环。并查集有很多的作用。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 const int MAXN = 100005;
 7 
 8 int f[MAXN];
 9 
10 int find(int x){
11     if (x != f[x])
12         f[x] = find(f[x]);
13     return f[x];
14 }
15 
16 int main(){
17     int x,y;
18     while (scanf("%d",&x) != EOF){
19         for (int i = 0; i < MAXN; i++)
20             f[i] = i;
21         int ans = 0;
22         while (x != -1){
23             scanf("%d",&y);
24             int fx = find(x),fy = find(y);
25             if (fx == fy)
26                 ans++;
27             else f[fx] = fy;
28             scanf("%d",&x);
29         }
30         printf("%d\n",ans);
31     }
32     return 0;
33 }
View Code

 

转载于:https://www.cnblogs.com/chujian123/p/3870411.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值