题目地址: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]