首页 > 代码库 > poj 1182 并查集
poj 1182 并查集
#include <stdio.h>
int father[50050];
void initializtion(int n)
{
for(int i=0; i<=n+1; i++)
father[i] = i;
}
bool find(int a, int b)
{
//int flag = 0;
if(a==b) return 0;
else
{
int temp = a;
if(temp == a && father[temp] == b)
return 0;
while(father[temp] != temp)
{
temp = father[temp];
if(temp == b) return 1;
if(temp == a) return 1;
}
return 0;
}
}
void update(int a, int b)
{
int i = a;
if(i == a && father[i] == b)
return ;
while(father[i] != i)
{
i = father[i];
}
father[i] = b;
}
int main()
{
int N, K;
while(scanf("%d%d", &N, &K)!=EOF)
{
initializtion(N);
int mistake = 0;
int a, b, c;
for(int i=0; i<K; i++)
{
scanf("%d%d%d", &a, &b, &c);
if(b>N || c>N)
{mistake++; continue;}
if(a==1)
{
if(find(b, c) ) mistake ++;
}
if(a==2)
{
if(b==c) mistake++;
else
{
if(find(b, c) ) mistake++;
else update(b, c);
}
}
}
printf("%d\n", mistake);
}
return 0;
}
来自为知笔记(Wiz)
附件列表
poj 1182 并查集
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。