站外题求助
  • 板块学术版
  • 楼主WA_sir
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/1 11:49
  • 上次更新2023/11/3 11:59:47
查看原帖
站外题求助
704156
WA_sir楼主2023/7/1 11:49

题目链接

始终 80pts80 pts。

#include<bits/stdc++.h>
#define l long long
using namespace std;
l n,m,qq=1,f[1005][1005],fa[10000005],ans;
l find(l x)
{
	if(x-fa[x])fa[x]=find(fa[x]);
	return fa[x];
}
int main()
{
	scanf("%lld%lld",&m,&n);
	for(l i=1;i<=n;i++)for(l j=1;j<=m;j++,qq++)f[i][j]=qq;
	for(l i=0;i<=qq;i++)fa[i]=i;
	l xa,xb,ya,yb;
	while(scanf("%lld%lld%lld%lld",&xa,&xb,&ya,&yb)==4)
	{
		int xx=find(f[xa][xb]),yy=find(f[ya][yb]);
		if(xx-yy)fa[yy]=xx;
	}
	for(l j=1;j<=n;j++)
		for(l i=1;i<m;i++)
		{
			l x=find(f[i][j]),y=find(f[i+1][j]);
			if(x-y)fa[y]=x,ans++;
		}
	for(l i=1;i<=m;i++)
		for(l j=1;j<n;j++)
		{
			l x=find(f[i][j]),y=find(f[i][j+1]);
			if(x-y)fa[y]=x,ans+=2;
		}
	printf("%lld",ans);
	return 0;
}
2023/7/1 11:49
加载中...