首页 > 代码库 > X-Plosives
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 }
X-Plosives
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。