比赛 EYOI与SBOI开学欢乐赛7th 评测结果 AAAAAAAAAA
题目名称 聪明的猴子 最终得分 100
用户昵称 遥时_彼方 运行时间 0.239 s
代码语言 C++ 内存使用 17.22 MiB
提交时间 2022-09-23 20:56:40
显示代码纯文本
#include<bits/stdc++.h>
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define drep(x,y,z) for(int x=y;x>=z;x--)
#define ull unsigned long long
#define ll long long
using namespace std;
inline int read()
{
	int x=0;bool flag=1;char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-')flag=0;ch=getchar();}
	while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	if(flag) return x;
	return ~(x-1);
} 
inline void write(int x)
{
	if(x<0) {x=~(x-1);putchar('-');}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
//
const int N=1e3+50;
const int M=1e6+50;
int mc,nc; 
int k[N];
int n[N][2];
int hd[N];
int mx;
struct qxx
{
	int ar;
	int nx;
	int p;	
}a[M<<1];
int aj;
inline void ADD(int x,int y)
{
	a[++aj].ar=y;
	a[aj].p=(n[x][0]-n[y][0])*(n[x][0]-n[y][0])+(n[x][1]-n[y][1])*(n[x][1]-n[y][1]);
	a[aj].nx=hd[x];
	hd[x]=aj;
}
int e[N];//是否在树中
int m[N];//树到x(未在树中)的最小路长 
struct DL
{
	int p;
	int ar;
};
struct cmp
{
	bool operator()(DL x,DL y)
	{
		return x.p>y.p;
	}
};
priority_queue<DL,vector<DL>,cmp> q;
int sz;
void prim(int cl)
{
	e[cl]=1;
	sz++;
	if(sz==nc) return;
	DL z;
	for(int i=hd[cl];i;i=a[i].nx)
	{
		if(e[a[i].ar]||a[i].p>=m[a[i].ar]) continue;
		m[a[i].ar]=a[i].p;
		z.ar=a[i].ar;
		z.p=a[i].p;
//		cout<<"IN:"<<z.ar<<"."<<z.p<<endl;
		q.push(z);
	}
	z=q.top(),q.pop();
	while(e[z.ar]) 
	{
//		if(cl==5) cout<<"Z:"<<z.ar<<"."<<z.p<<endl;
		z=q.top(),q.pop();
	}
	mx=max(z.p,mx);
//	cout<<"TREE:"<<z.ar<<"."<<z.p<<endl;
	prim(z.ar);
}
int ans=1;
bool cmpk(int x,int y)
{
	return x>y;
}
int main()
{
    freopen("monkey.in","r",stdin);
	freopen("monkey.out","w",stdout);
    mc=read();
    rep(i,1,mc) k[i]=read(),k[i]*=k[i];
    sort(k+1,k+mc+1,cmpk);
    nc=read();
    rep(i,1,nc)
    {
    	n[i][0]=read(),n[i][1]=read();
    	rep(o,1,i-1) ADD(i,o),ADD(o,i);
	}
	memset(m,0x3f,sizeof(m));
	prim(1);
	while(k[ans]>=mx) ans++;
//	cout<<"MX:"<<mx<<endl;
//	rep(i,1,mc) cout<<i<<":"<<k[i]<<endl;
	write(ans-1),putchar(10); 
    return 0;
}