博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HAOI2006] 聪明的猴子
阅读量:4490 次
发布时间:2019-06-08

本文共 1364 字,大约阅读时间需要 4 分钟。

  求有多少只猴子可以在所有树上跳来跳去。

  求出图的最小生成树,因为最小生成树是一颗瓶颈生成树(树上最大边权最小),记录下这棵树的最大边权。因为猴子是一条一条边跳的,所以只要猴子能越过这条边,就能越过所有的边,进而到达所有的树。

 

// q.c#include
#include
#include
#include
#include
using namespace std;const int M=1000+10;struct Edge { int u,v; double w; Edge():u(0),v(0),w(0) {} bool operator < (const Edge &A) const { return w
>1];int m,n,cnt,w[M],x[M],y[M],fa[M],ans;void add_edge(int a,int b,double c) { ed[++cnt].u=a,ed[cnt].v=b,ed[cnt].w=c;}double dis(int a,int b) { return sqrt((x[a]-x[b])*(x[a]-x[b])*1.0+(y[a]-y[b])*(y[a]-y[b]));}int find(int a) { return fa[a]==a?a:fa[a]=find(fa[a]);}double kruscal() { sort(ed+1,ed+cnt+1); int k=1; double maxx=0; for(int i=1;i<=cnt;i++) { Edge p=ed[i]; int fu=find(p.u); int fv=find(p.v); if(fu==fv) continue; fa[fu]=fv; ++k; if(k==n) { // ~~~if(k==n-1)~~~ maxx=p.w; break; } } return maxx;}int main() { freopen("monkey.in","r",stdin); freopen("monkey.out","w",stdout); scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%d",&w[i]); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]),fa[i]=i; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) add_edge(i,j,dis(i,j)); double maxx=kruscal(); for(int i=1;i<=m;i++) if(w[i]>=maxx) ans++; printf("%d\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/qjs12/p/8688139.html

你可能感兴趣的文章
docker运行环境安装-后续步骤(二)
查看>>
Python学习——02-Python基础——【3集合与函数】
查看>>
NPOI导出excel表格应用
查看>>
tensorflow从入门到放弃-0
查看>>
解锁scott用户
查看>>
多态的理解
查看>>
AspNet Core 发布到Linux系统和发布IIS 注意项
查看>>
Windows添加.NET Framework 3.0 NetFx3 失败 - 状态为:0x800f0950
查看>>
隐藏显示终端的光标(shell echo,linux c printf)
查看>>
SQL Server 存储过程
查看>>
JSP 标准标签库(JSTL)(JSP Standard Tag Library)
查看>>
导入项目遇到的问题: Some projects cannot be imported because they already exist in the workspace....
查看>>
华为:字符集合
查看>>
用Okhttp框架登录之后的Cookie设置到webView中(转)
查看>>
Java_Activiti5_菜鸟也来学Activiti5工作流_之入门简单例子(一)
查看>>
设计模式(一)工厂模式Factory(创建型)
查看>>
linux中安装软件的集中方法
查看>>
Express中间件,看这篇文章就够了(#^.^#)
查看>>
《构建之法》(五)
查看>>
创建django项目
查看>>