HDU 1856 More is better(并查集+离散化)

题目地址:HDU 1856

水题。由于标号范围太大,而数据数只有10w,所以要先进行离散化。然后就是裸的并查集了。

代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
int bin[100001], x[100001], y[100001], z[200001], c[200001], cnt, vis[200000];
int find1(int x)
{
    return bin[x]==x?x:bin[x]=find1(bin[x]);
}
void merger(int x, int y)
{
    int f1=find1(bin[x]);
    int f2=find1(bin[y]);
    if(f1!=f2)
        bin[f2]=f1;
}
int twofen(int x)
{
    int high=cnt-1, low=0, mid;
    while(low<=high)
    {
        mid=low+high>>1;
        if(c[mid]==x) return mid;
        else if(c[mid]


你可能感兴趣的:(并查集)