社区讨论

关于并查集

学术版参与者 8已保存回复 32

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
32 条
当前快照
1 份
快照标识符
@lo8tmpek
此快照首次捕获于
2023/10/28 00:21
2 年前
此快照最后确认于
2023/10/28 00:21
2 年前
查看原帖
为什么find函数用三目运算符会超时,而if不会,如以下程序
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,fa[N],ans[N],cnt;
char col[N];
/*int find(int x){return fa[x]==x?x:find(fa[x]);}
void merge(int u,int v){fa[find(u)]=find(v);}*/
int find(int x)
{
	if(x==fa[x])	return x;
	return fa[x]=find(fa[x]);
}
void merge(int x,int y)
{
	fa[find(x)]=find(y);
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)fa[i]=i,cin>>col[i];
	for(int i=1;i<n;i++)
	{
		int u,v;
		cin>>u>>v;
		if(col[u]==col[v]) merge(u,v);
	}
	for(int i=1;i<=m;i++)
	{
		int u,v;char c;
		cin>>u>>v>>c;
		if(find(u)==find(v)&&col[u]!=c) ans[++cnt]=0;
		else ans[++cnt]=1;
	}
	for(int i=1;i<=cnt;i++)printf("%d",ans[i]);
	return 0;
}

回复

32 条回复,欢迎继续交流。

正在加载回复...