bzoj2429 [HAOI2006]聪明的猴子(prim)
2017-09-28 08:34
288 查看
就是求最大边最小,就是最小生成树,prim应该更快些
#include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 1010 #define M 510 #define pa pair<int,int> inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int m,n,a[M],d ,ans=0; bool vis ; struct point{ int x,y; }p ; void prim(){ priority_queue<pa,vector<pa>,greater<pa> >q;memset(d,0x3f,sizeof(d)); d[1]=0;q.push(make_pair(0,1)); while(!q.empty()){ int x=q.top().second;q.pop();if(vis[x]) continue; vis[x]=1;ans=max(ans,d[x]); for(int i=1;i<=n;++i){ if(vis[i]) continue; int dy=(p[i].x-p[x].x)*(p[i].x-p[x].x)+(p[i].y-p[x].y)*(p[i].y-p[x].y); if(dy<d[i]){d[i]=dy;q.push(make_pair(d[i],i));} } } } int main(){ // freopen("a.in","r",stdin); m=read();for(int i=1;i<=m;++i) a[i]=read(); n=read(); for(int i=1;i<=n;++i) p[i].x=read(),p[i].y=read(); prim();int res=0; for(int i=1;i<=m;++i) if(a[i]*a[i]>=ans) res++; printf("%d\n",res); return 0; }
相关文章推荐
- BZOJ 2429 [HAOI2006]聪明的猴子 最小生成树 Prim
- BZOJ 2429: [HAOI2006]聪明的猴子【最小生成树】
- BZOJ 2429: [HAOI2006]聪明的猴子
- [瓶颈生成树] BZOJ 2429 [HAOI2006]聪明的猴子
- BZOJ2429[HAOI2006]聪明的猴子(最小生成树)
- [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
- BZOJ 2429: [HAOI2006]聪明的猴子( MST )
- [BZOJ2429][HAOI2006]聪明的猴子(MST)
- bzoj2429 [HAOI2006]聪明的猴子 最小生成树
- BZOJ 2429 [HAOI2006]聪明的猴子 MST最小生成树
- bzoj 2429: [HAOI2006]聪明的猴子 并查集
- BZOJ2429: [HAOI2006]聪明的猴子
- 【bzoj2429】[HAOI2006]聪明的猴子
- BZOJ2429 :[HAOI2006]聪明的猴子
- BZOJ2429[HAOI2006]聪明的猴子[最小生成树 kruskal]
- BZOJ2429 [HAOI2006] 聪明的猴子
- bzoj2429: [HAOI2006]聪明的猴子
- |BZOJ 2429|生成树|[HAOI2006]聪明的猴子
- [bzoj2429][HAOI2006]聪明的猴子 kruskal
- bzoj2429: [HAOI2006]聪明的猴子(最小生成树)