10tps求助
查看原帖
10tps求助
1073342
Genshin_ZFYX楼主2024/8/21 16:29

QwQ不知道为什么写挂了呜呜呜

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct Edge{
	int v,to;
}e[2000005];
int n,m,tot,cnt;
long long maxn[1000005],minx[1000005];
int b[1000005],vis[1000005],head[1000005];
void addedge(int u,int v)
{
	tot++;
	e[tot].v=v;
	e[tot].to=head[u];
	head[u]=tot;
}
void dfs(int x)
{
	cnt++;
	b[cnt]=x;
	vis[x]=1;
	for(int i=head[x];i;i=e[i].to)
	{
		int v=e[i].v;
		if(!vis[v])dfs(v);
	}
}
signed main()
{
	cin.tie(0)->sync_with_stdio(0);
// 	freopen("A.in","r",stdin);
// 	freopen("A.out","w",stdout);
	int t;cin>>t;
	while(t--)
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		head[i]=vis[i]=0;
		for(int i=1;i<=m;i++)
		{
			int u,v;cin>>u>>v;
			addedge(u,v);
			addedge(v,u);
		}
		for(int i=1;i<=n;i++)
		{
			if(vis[i])continue;
			cnt=0;dfs(i);
//			cout<<"size"<<i<<":"<<cnt<<'\n';//调试 
			int ma=0,mi=n+1;
			for(int j=1;j<=cnt;j++)
			mi=min(mi,b[j]),ma=max(ma,b[j]);
			for(int j=1;j<=cnt;j++)
			maxn[b[j]]=ma,minx[b[j]]=mi;
		}
		long long ans=LLONG_MAX;
		for(int i=1;i<=n;i++)
		{
//			cout<<i<<" max:"<<maxn[i]<<" min:"<<minx[i]<<'\n';//调试 
			ans=min(ans,abs(minx[n]-maxn[i])*abs(minx[n]-maxn[i])+abs(minx[i]-maxn[1])*abs(minx[i]-maxn[1]));
		}
		ans=min(ans,abs(minx[n]-maxn[1])*abs(minx[n]-maxn[1]));
		if(maxn[1]==n)ans=0;
		cout<<ans<<'\n';
	}
	return 0;
 } 
2024/8/21 16:29
加载中...