80分求助 玄一棺
查看原帖
80分求助 玄一棺
777848
superkkkeee楼主2024/8/14 09:55

用并查集做的,Wa on #1 #9

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
int t;
double  n,m;
struct node
{
	double x,y;
}a[300001];
int fa[300001];
bool sm[300001],xm[300001];
bool sn[300001],xn[300001];
double ans;
const double eps=1e-7;
int find(int x)
{
	if(fa[x]==x) return x;
	fa[x]=find(fa[x]);
	return fa[x];
}
void add(int x,int y)
{
	int xx=find(x);
	int yy=find(y);
	if(xx==yy) return;
	if(xx>yy) swap(xx,yy);
	fa[yy]=xx;
	sm[xx]|=sm[yy]; xm[xx]|=xm[yy];
	sn[xx]|=sn[yy]; xn[xx]|=xn[yy];
	sm[yy]|=sm[xx]; xm[yy]|=xm[xx];
	sn[yy]|=sn[xx]; xn[yy]|=xn[xx];
}
bool pdd(int x,int y)
{
	int xx=find(x);
	int yy=find(y);
	if(xx!=yy) return 0;
	if(sm[xx]&&xm[xx]) return 1;
	if(sn[xx]&&xn[xx]) return 1;
	if(sn[xx]&&xm[xx]) return 1;
	if(sm[xx]&&xn[xx]) return 1;
	return 0;
}
double hs(node x,node y)
{
	return sqrt((x.x-y.x*1.0)*(x.x-y.x*1.0)*1.0+(x.y-y.y*1.0)*(x.y-y.y*1.0)*1.0)*1.0;
}
bool pd(double k)
{
	for(int i=1;i<=t;i++)
	{
		sm[i]=0; xm[i]=0;
		sn[i]=0; xn[i]=0;
		fa[i]=i;
	}
	node sc={1,1};
	node cs={n,m};
	for(int i=1;i<=t;i++)
	{
		int x=i;
		double q=(a[x].x);
		if(q<k) sn[x]=1;
		double qq=(n-a[x].x);
		if(qq<k) xn[x]=1;
		
		q=(a[x].y);
		if(q<k) xm[x]=1;
		qq=(m-a[x].y);
		if(qq<k) sm[x]=1;

		if(sm[x]&&xm[x]) return 0;
		if(sn[x]&&xn[x]) return 0;
		if(sn[x]&&xm[x]) return 0;
		if(sm[x]&&xn[x]) return 0;
		double w=hs(sc,a[x]); if(w<=k) return 0;
		w=hs(cs,a[x]); if(w<=k) return 0;
	}
	for(int i=1;i<=t;i++)
	{
		for(int j=1;j<=i;j++)
		{	
			
			if(hs(a[i],a[j])<k*2.0)
			{
				int xx=find(i);
				int yy=find(j);
				add(xx,yy);
				xx=find(xx); yy=find(yy);
				if(pdd(xx,yy)) return 0;
			}
		}
	}
	return 1;
}
signed main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>t>>n>>m;
	//swap(n,m);
	for(int i=1;i<=t;i++)
	{
		cin>>a[i].x>>a[i].y;
	}
	double l=0,r=1e10;
	while(r-l>eps)
	{
		double mid=(l+r)/2.0;
		if(pd(mid))
		{
			ans=mid;
			l=mid;
		}
		else r=mid;
	}
	cout<<fixed<<setprecision(2)<<ans;
	return 0;
}
2024/8/14 09:55
加载中...