hdu 4750 最小生成树
来源:互联网 发布:php所有的数据类型 编辑:程序博客网 时间:2024/06/02 02:52
题意:南京理工大学有很多景点。两个景点组成一对。两个景点的价值用这种方式计算:设两个景点之间一条路径中最长的一条路的距离是s,这两个景点的价值f就是所有路径中s的最小值。游客想要找价值大于等于t的景点对有多少个。
#include <stdio.h>#include<vector>#include <string.h>#include<algorithm>using namespace std;struct node{ int u,v,val;}e[500005];bool cmp(node a,node b){ return a.val<b.val;}long long rank1[500005],f[500005],ans[500005],len[500005];int find(int x){ if(f[x]==x) return x; else return f[x]=find(f[x]);}int main(){int n,m;while(~scanf("%d%d",&n,&m)) { for(int i=0;i<m;i++) { scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].val); } for(int i=0;i<=n;i++) { f[i]=i; rank1[i]=1; } sort(e,e+m,cmp); int sum=n-1; int top=2; for(int i=0;i<m;i++) { int x=find(e[i].u); int y=find(e[i].v); if(x!=y) { len[top]=e[i].val; ans[top++]=rank1[x]*rank1[y]*2; rank1[y]+=rank1[x]; f[x]=y; } } ans[0]=ans[1]=len[0]=len[1]=0; for(int i=1;i<top;i++) { ans[i]+=ans[i-1]; //printf("%lld\n",len[i]); } int k; scanf("%d",&k); for(int i=0;i<k;i++) { int t; scanf("%d",&t); int pos=lower_bound(len,len+top,t)-len-1; // printf("....%lld %lld %d....\n",ans[top-1],ans[pos],pos); printf("%lld\n",ans[top-1]-ans[pos]); } }}
阅读全文
0 0
- hdu 4750 (最小生成树)
- hdu 4750 最小生成树
- HDU 4750 最小生成树 kruskal
- HDU 1879 最小生成树
- HDU-1836 最小生成树
- hdu 1863 最小生成树
- hdu 1233 最小生成树
- hdu 4081 最小生成树
- hdu 1863 最小生成树
- HDU-1162(最小生成树)
- hdu 1233 最小生成树
- hdu 2682 最小生成树
- HDU 1102 最小生成树
- HDU 1162 最小生成树
- HDU 1233 最小生成树
- HDU 1301 最小生成树
- HDU 1863 最小生成树
- HDU 1879 最小生成树
- 深度学习的论文查找
- ssm练手(CRUD) 4、结合bootstrap,建立好前端模型
- 第3章 指令
- 图的边
- 前端技术之缓存localstorage,sessionstorage,cookies
- hdu 4750 最小生成树
- 几种排序算法的稳定性比较
- 奋斗群群赛3总结与心得(缺5)
- windows动态链接机制(一)
- 《HTML5权威指南》之使用window对象
- linux环境下创建weblogic域和部署
- java基本数据类型
- 浅谈CSRF攻击方式
- 九度1123:采药