码迷,mamicode.com
首页 > 其他好文 > 详细

luogu1892团伙

时间:2018-04-07 19:07:09      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:cst   ==   def   efi   AC   scan   int   gpo   就是   

题解:

让一个二维数组存一下他的敌人
举例:ans[i][0] 就是i的敌人的个数,然后a[i][j]就是指他第j个敌人。

#include<iostream>
#include<cstdio>
#define X 10000+7
using namespace std;
int fa[X],ans[X][X];
int find(int x)
{
	if(fa[x]==x)return x;
	return fa[x]=find(fa[x]);
}
int hb(int x,int y)
{
	int ff=find(x),fff=find(y);
	fa[ff]=fff;
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
	fa[i]=i;
	char a;
	for(int i=1,x,y;i<=m;++i)
	{
		cin>>a>>x>>y; 
		if(a==‘F‘)hb(x,y);
		if(a==‘E‘)
		{
			for(int j=1;j<=ans[y][0];++j)
			{
				hb(x,ans[y][j]);
			}
			for(int j=1;j<=ans[x][0];++j)
			hb(y,ans[x][j]);
			ans[x][++ans[x][0]]=y;
			ans[y][++ans[y][0]]=x;
		}
	}
	int k=0;
	for(int i=1;i<=n;++i)
	{
		if(fa[i]==i)k++;
	}
	cout<<k;
}

  

luogu1892团伙

标签:cst   ==   def   efi   AC   scan   int   gpo   就是   

原文地址:https://www.cnblogs.com/tpgzy/p/8734026.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!