调了一个半小时了,我根本不知道是什么地方 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;
}