90pts wa on #1求调教
查看原帖
90pts wa on #1求调教
754502
_AyachiNene楼主2023/9/18 22:54
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int nxt,to;
	double val;
}e[1145141];
int head[1145141],cnt;
void add(int u,int v,double w)
{
	e[++cnt].to=v;
	e[cnt].val=w;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
double x[114514],y[114514];
double cale(int i,int j)
{
	double dx=x[i]-x[j];
	double dy=y[i]-y[j];
	return sqrt(dx*dx+dy*dy);
}
int n,m;
int vis[1145141];
bool check(double mid)
{
	queue<int>q;
	q.push(0);
	memset(vis,0,sizeof vis);
	vis[0]=1;
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		for(int i=head[u];i;i=e[i].nxt)
		{
			int v=e[i].to;
			if(!vis[v])
			{
				if(v==m+1||v==0)
				{
					if(e[i].val<=mid)
					{
						q.push(v);
						vis[v]=1;
					}
				}
 				else if(e[i].val<=2*mid)
				{
					q.push(v);
					vis[v]=1;
				}
			}
		}
	}
	return vis[m+1];
}
double ans;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x[i]>>y[i];
		add(i,0,x[i]),add(0,i,x[i]);
		add(i,m+1,n-x[i]),add(m+1,i,n-x[i]);
	}
	for(int i=1;i<=m;i++)
		for(int j=1;j<=m;j++)
			if(i!=j)
				add(i,j,cale(i,j));
	double l=0,r=1e4;
	for(int i=1;i<=114*2;i++)
	{
		double mid=(l+r)/2;
//		cout<<mid<<endl;
		if(check(mid))
			ans=mid,r=mid;
		else
			l=mid;
	}
	printf("%.2lf",ans);
}
2023/9/18 22:54
加载中...