全 RE 求助!
查看原帖
全 RE 求助!
678447
CSPAK_Zhangxiuqi0011楼主2024/9/1 08:10

调了一个半小时了,我根本不知道是什么地方 RE,但是本地可以正常运行(只不过 WA 了),请各路大佬帮本蒟蒻看看!只需要不 RE 就行,之后如果还有 WA 我会自行调试,感谢。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int maxd[300005],fa[300005],visit[300005],n,m,q,dp[300005];
vector<int>ve[300005];
int find(int now) {
	return (fa[now] == now?now:fa[now] = find(fa[now]));
}
int make(int x,int y) {
	fa[find(x)] = find(y);
}
void dfs(int now,int fa) {
	int l,max1,max2;
	l = ve[now].size();
	max1 = 0;
	max2 = 0;
	for(int i = 0; i<l; i++) {
		if(ve[now][i] == fa) {
			continue;
		}
		dfs(ve[now][i],now);
		if(dp[ve[now][i]]>max1) {
			max2 = max1;
			max1 = dp[ve[now][i]];
		} else if(dp[ve[now][i]]>max2) {
			max2 = dp[ve[now][i]];
		}
	}
	if(!max1) {
		return;
	}
	dp[now] = max1+1;
	if(!max2) {
		maxd[now] = max1+1;
	} else {
		maxd[now] = max1+max2+2;
	}
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
//	freopen("1.in","r",stdin);
	cin>>n>>m>>q;
	for(int i = 1; i<=n; i++) {
		fa[i] = i;
	}
	for(int i = 1; i<=m; i++) {
		int u,v;
		cin>>u>>v;
		ve[u].push_back(v);
		ve[v].push_back(u);
		make(u,v);
	}
	for(int i = 1; i<=n; i++) {
		if(visit[find(i)]) {
			continue;
		}
		visit[find(i)] = 1;
		dfs(find(i),0);
	}
	for(int i = 1;i<=n;i++){
		maxd[find(i)] = max(maxd[find(i)],maxd[i]);
	}
	while(q--) {
		int op,x,y;
		cin>>op>>x;
		if(op == 1) {
			cout<<maxd[find(x)]<<"\n";
		} else {
			cin>>y;
			if(find(x) == find(y)) {
				continue;
			}
			int help;
			help = max(max(maxd[find(x)],maxd[find(y)]),(maxd[find(x)]+1)/2+(maxd[find(y)]+1)/2+1);
			make(x,y);
			maxd[find(x)] = help;
		}
	}
	return 0;
}

2024/9/1 08:10
加载中...