HDU2473 - Junk-Mail Filter 利用虚拟数组实现删除并查集的节点

HDU2473 - Junk-Mail Filter 增加一个虚拟数组,实现"删除"并查集某个节点的功能
摘要由CSDN通过智能技术生成

HDU2473 - Junk-Mail Filter: http://acm.hdu.edu.cn/showproblem.php?pid=2473

题目大意: M a b,代表a和b是同一类的,S a,代表原先给出的a的信息是错的,现在将其单独分成一类. 求最后一共有多少类邮件.

若只是分类,很直接就会想到并查集.但这里若直接用并查集是会出错的,因为删除的那个节点后面还可能会有其他的子节点,若直接把其删除,结果会出错. 这里就需要用到一个虚拟数组Trick,和Father数组合作,实现"删除"的目的(实际上该节点还是存在的).

代码: 

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 1000111*2;
int N,M;
int x,y;
int cnt,Case = 0,Ans;
int Trick[MAXN],Father[MAXN],Hash[MAXN];
void Initial()
{
	cnt = N;
    Ans = 0;
	for(int i = 0;i < MAXN;i++)//另开一个虚拟数组Trick,开始和Father储存一样的信息 
		Father[i] = Trick[i] = i,Hash[i] = 0;
}
int Find(int x)
{
	if(x == Father[x])return x;
	return Father[x] = Find(Father[x]);	
}
void Union(int x,int y)
{
	x = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值