LA3644 - X-Plosives
题意:有N种简单化合物,每种化合物由两种元素组成,每次放入一种化合物,如果放进去化合物数和元素数相等会爆炸,则不放当前化合物,求问有多少个化合物不能放入。
题解:每次放进去可以靠并查集维护,爆炸的情况就是正好有环的情况,那么统计有多少个环即可。
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 100007;
int x,y,ans,fa[maxn],size[maxn];
int find(int x)
{
return x==fa[x]?x:fa[x]=find(fa[x]);
}
int main(int argc, char const *argv[])
{
while(cin>>x)
{
_for(i,1,maxn)fa[i]=i;
ans=0;
while(x!=-1)
{
cin>>y;
int p=find(x);
int q=find(y);
if(p==q)
{
ans++;
}
else fa[p]=q;
cin>>x;
}
cout<<ans<<endl;
}
return 0;
}

博客详细介绍了如何使用并查集解决LA3644 - X-Plosives问题。内容主要集中在如何通过并查集来维护环状结构,并在代码实现中统计环的数量,从而解决爆炸情况的判断。
384

被折叠的 条评论
为什么被折叠?



