⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1988.txt

📁 北大ACM题目例程 详细的解答过程 程序实现 算法分析
💻 TXT
字号:


#include"stdio.h"
#include"memory.h"

int set[30001];
int ans[30001];

int st[30000],sn;

int find_root( int s )
{
	int t;
	sn = 0;
	while( set[s] >=0 )
	{
		st[sn++] = s;
		s = set[s];

	}

	t = 0;

	while( sn-- )
	{
		set[ st[sn] ] = s;
		ans[ st[sn] ] +=t;
		t = ans[ st[sn] ];
	}

	return s;
}

void merge( int a, int b )
{
	int ra = find_root( a ), rb = find_root( b );

	ans[ra] = -set[rb];
	set[rb] += set[ra];
	set[ra] = rb;
}

int main()
{
	int p, a, b;
	char c[2];

	memset( set, -1, sizeof( set ) );
	memset( ans,  0, sizeof( ans ) );

	scanf( "%d", &p );

	while( p-- )
	{
		scanf( "%1s", c );
		if( c[0] == 'C' )
		{
			scanf( "%d", &a );
			find_root(a);
			printf( "%d\n", ans[a] );
		}
		else
		{
			scanf( "%d %d", &a, &b );
			merge( a, b );
		}
//		for(int i=0; i<8; i++ )
//			printf( "%d ", set[i] );
//		printf( "\n" );
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -