题目大意:
给出一些化合物,每组化合物由两个元素组成,在N>2的情况下,如果有n组化合物正好对应n种物质,如:A - B B - C C - A 这样就会产生爆炸,就不饿能要了,对于每组化合物,如果会产生爆炸则不能要,否则必须要。

解题思路:
经典带环并查集。看了一晚上硬是没看出来,题解把每一组化合物看成一个边,把每一个元素看成点,进来一组就连一组,如果成环的话则ans++,最后输出ans即可。AC代码:
PS:多组输入是个坑,注意一下

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int _max = 1e5+50;
int f[_max],ans=0,a,b;
int find(int x)//寻根+路径压缩
{
	return f[x]==x?x:f[x]=find(f[x]);
}
void merge(int x,int y)//判断是否合并
{
	int t1=find(x);
	int t2=find(y);
	t1==t2?ans++:f[t2]=t1;
}
void init()
{
	ans=0;
	for(int i=0;i<_max;i++)
	  f[i]=i;
}
int main()
{
	for(int i=0;i<_max;i++)
	  f[i]=i;
	while(cin>>a)
	{
		if(a==-1)
		{
			cout<<ans<<endl;
			init();
			continue;
		}
		cin>>b;
		merge(a,b);
	}
	//system("pause");
	return 0;
}

相关文章:

  • 2021-07-27
  • 2022-12-23
  • 2021-10-27
  • 2022-12-23
  • 2021-10-15
  • 2022-01-02
  • 2021-08-07
  • 2022-01-04
猜你喜欢
  • 2021-08-22
  • 2022-12-23
  • 2022-12-23
  • 2021-07-21
  • 2021-12-06
  • 2021-08-12
  • 2021-09-23
相关资源
相似解决方案