WA了一版了,救救蒟蒻吧!!!
  • 板块P2195 HXY造公园
  • 楼主hytree
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/11/4 09:36
  • 上次更新2023/11/5 09:03:42
查看原帖
WA了一版了,救救蒟蒻吧!!!
221002
hytree楼主2020/11/4 09:36

RTRT,小蒟蒻刚学DFSDFS,自己看了下题意就想到了这个解法,但不知道为什么一直WAWA,跟题解改的越来越像了,救救蒟蒻吧QAQQAQ!!! Code:Code:

#include<bits/stdc++.h>
using namespace std;
#define re register
#define N 600010
int n,m,q,kx,ky,opt,h[N],cnt=1,fa[N],dis[N],maxa,kiss;
struct STAR{int v,w,nxt;}e[N<<1];
void add(int u,int v){e[++cnt]=(STAR){v,h[u]};h[u]=cnt;}
int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}
char vis[N];
void DFS(int x,int faz,int num)
{
	if(num>maxa) maxa=num,kiss=x;
	for(re int i=h[x];i;i=e[i].nxt)
	{
		int v=e[i].v;
		if(v==faz)continue;
		DFS(v,x,num+1);
	}
	return;
}
int main()
{
	cin>>n>>m>>q;
	for(re int i=1;i<=n;++i) fa[i]=i;
	for(re int i=1;i<=m;++i)
	{
		scanf("%d%d",&kx,&ky),add(kx,ky),add(ky,kx);
		if(getfa(kx)!=getfa(ky)) fa[getfa(kx)]=getfa(ky);
	}
	for(re int i=1;i<=n;++i) 
	if(!vis[getfa(i)])
	{
		vis[getfa(i)]=1;
		maxa=-0x3fffffff;
		DFS(i,0,0);
		maxa=-0x3fffffff;
		DFS(kiss,0,0);
		dis[getfa(i)]=maxa;
	}
	while(q--)
	{
		scanf("%d",&opt);
		if(opt==1)
		{
			scanf("%d",&kx);
			int fax=getfa(kx);
			printf("%d\n",dis[fax]);
		}
		else
		{
			scanf("%d%d",&kx,&ky);
			int fax=getfa(kx),fay=getfa(ky);
			if(fax==fay)continue;
			fa[fax]=fay;
			dis[fay]=max((dis[fax]+1)/2+(dis[fay]+1)/2+1
			,max(dis[fax],dis[fay]));
		}
	}
	return 0;
}
2020/11/4 09:36
加载中...