史强 @ 2020-01-10 10:33:51
最近一直在练习并查集
p.s.:各位大佬能推荐点题目么?
压缩前:
#include <bits/stdc++.h>
using namespace std;
struct unionfind
{
int bin[10005];
unionfind()
{
for(int i=1;i<=10002;i++)
{
bin[i]=i;
}
}
int anc(int x)
{
if(bin[x]==x)
return x;
else
return anc(bin[x]);
}//return anc(bin[x]);
void uni(int x,int y)
{
bin[anc(x)]=anc(y);
}
void ask(int x,int y)
{
if(anc(x)==anc(y))
{
cout<<"Y"<<endl;
}
else
{
cout<<"N"<<endl;
}
}
};
unionfind u;
int main(void)
{
int n,m;
int z,x,y;
cin>>n>>m;
while(m--)
{
cin>>z>>x>>y;
if(z==1)u.uni(x,y);
else
if(z==2)u.ask(x,y);
}
return 0;
}
码风与众不同
结果:点我
震惊:与ta一样
于是改了一下
(代码在此不展示,各位大佬应该明白)
评测结果:点我
by ieeqwq @ 2020-01-10 11:30:48
α很小
by Kubic @ 2020-01-10 11:31:02
但是并查集常数极小,而且也没有人会无聊到卡路径压缩的并查集
by EndSaH @ 2020-01-10 12:44:13
有卡的数据构造方法啊,洛咕日报有一期介绍了
by LZDQ @ 2020-01-10 12:45:18
路径压缩的并查集卡不了吧
by 茅场晶彦 @ 2020-01-10 12:46:47
为啥卡不了啊
by yurzhang @ 2020-01-10 12:52:01
没有优化的并查集是
by QuartZ_Z @ 2020-01-10 12:53:19
@森岛帆高 因为路径压缩log的常数较小,运行时间拉不开差距。
by 142857cs @ 2020-01-10 14:17:05
@QuartZ_Z 不算很小吧?常数是1。不过很少有人去卡O(nlogn)的时间复杂度,那样会卡在读入上
by zhy137036 @ 2020-01-10 16:22:14
@yurzhang 在算导哪一章哪一节?
by yurzhang @ 2020-01-10 16:43:49
@zhy123456 您不会看目录吗?
第 21 章第 4 节