HDU 5723 Abandoned country(最小生成树 + 树形DP)
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5723
【题目大意】
n座城市,m条路径,求解:
1.最短的路径和,使得n座城市之间直接或者间接连通
2.在路径和最短的情况下,求出任意两个城市之间的期望距离
【题解】
对于问题1,只需求出该图的最小生成树,边权和即答案,由于边权值唯一,因此不存在最小生成树多解的情况。
对于问题2,期望的通常求法为(任意两点之间的路径和)/(点对数)
那么问题就转化为任意两点间距离和的问题,我们按边考虑,对于每条树上的边,它对答案的贡献值为左边的点数×右边的点数×边权,搜索每个记录每棵子树的大小,对于子树和父节点相连的这条边,他左右两边的点数分别为(总点数-子树大小)和(子树大小),那么递归计算答案即可。
【代码】
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int N=1000005;
- int T,n,m,f[N],nxt[N],w[N],v[N],cnt[N],g[N],ed;
- double ans1,ans2;
- struct data{int x,y,z;}a[N];
- bool cmp(data a,data b){return a.z<b.z;}
- int sf(int x){return x==f[x]?x:f[x]=sf(f[x]);}
- void add(int x,int y,int z){v[++ed]=y;w[ed]=z;nxt[ed]=g[x];g[x]=ed;}
- void dfs(int x,int pre){
- cnt[x]=1;
- for(int i=g[x];i;i=nxt[i])if(v[i]!=pre){
- dfs(v[i],x);
- cnt[x]+=cnt[v[i]];
- ans2+=2.0*cnt[v[i]]*(n-cnt[v[i]])*w[i];
- }
- }
- int main(){
- scanf("%d",&T);
- while(T--){
- ans1=ans2=ed=0;
- memset(v,0,sizeof(v)); memset(nxt,0,sizeof(nxt));
- memset(w,0,sizeof(w)); memset(g,0,sizeof(g));
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;i++)scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
- sort(a+1,a+m+1,cmp);
- for(int i=1;i<=n;i++)f[i]=i;
- for(int i=1;i<=m;i++){
- if(sf(a[i].x)==sf(a[i].y))continue;
- f[sf(a[i].x)]=sf(a[i].y);
- ans1+=a[i].z;
- add(a[i].x,a[i].y,a[i].z);
- add(a[i].y,a[i].x,a[i].z);
- }dfs(1,1);
- printf("%.0f %.2f\n",ans1,ans2/n/(n-1));
- }return 0;
- }
HDU 5723 Abandoned country(最小生成树 + 树形DP)的更多相关文章
- HDU 5723 Abandoned country 最小生成树+搜索
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 5723 Abandoned country 最小生成树 期望
Abandoned country 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- hdu 5723 Abandoned country 最小生成树+子节点统计
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5723 Abandoned country (最小生成树+dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...
- Abandoned country(最小生成树+树形DP)
#include<bits/stdc++.h> using namespace std; struct node{ int u, v, w, nex; bool gone; node(){ ...
- 最小生成树 kruskal hdu 5723 Abandoned country
题目链接:hdu 5723 Abandoned country 题目大意:N个点,M条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...
- HDU 5723 Abandoned country(落后渣国)
HDU 5723 Abandoned country(落后渣国) Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 ...
- HDU 5723 Abandoned country 【最小生成树&&树上两点期望】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5723 Abandoned country Time Limit: 8000/4000 MS (Java/ ...
- HDU 5723 Abandoned country (最小生成树 + dfs)
Abandoned country 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- HDU 5723 Abandoned country(kruskal+dp树上任意两点距离和)
Problem DescriptionAn abandoned country has n(n≤100000) villages which are numbered from 1 to n. Sin ...
随机推荐
- 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)
java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...
- windows下mysql数据库表名大小写不敏感
最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题 ...
- android上传json与服务器交互
http://www.2cto.com/kf/201403/289328.html http://www.tuicool.com/articles/FZJR3eB
- jquery的选项卡事件
<?php /* * * @Authors peng--jun * @Email 1098325951@qq.com * @Date 2015-11-28 09:26:54 * @Link ht ...
- distance.c
#include "stdio.h" #include "string.h" #include "math.h" #include &quo ...
- div模拟textarea以实现高度自适应实例页面
作为多行文本域功能来讲,textarea满足了我们大部分的需求.然而,textarea有一个不足就是不能像普通div标签一样高度可以跟随内容自适应.textarea总是很自信地显摆它的滚动条,高度固执 ...
- 安装 Archlinux 小记
故事的背景 开始的时候装的 win8 + ubuntu 双系统,但是慢慢感觉只要有 windows 存在,在 Linux 上遇到问题了就想逃回去. 在一次 GDG 的演讲中听到的: 趁现在还年轻,还有 ...
- MacBook USB Type-C接口很美?其实是缩水的!
苹果终于推出了12寸的全新MacBook,拥有2304×1440的高分辨率.蝶式结构全尺寸键盘.新的触摸板.14nm Core M处理器和无风扇设计,以及新的USB 3.1 Type-C接口.可以预料 ...
- 表格无边框,有内框,在table嵌套时,防止出现重复边线
<html> <head> <title>test 表格无边框,有内框! ^^ CSDN 学习积累</title> <style type=&qu ...
- 数据库设计与SQL优化的建议
1. 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分开的操作尽量分开处理,提高每次的响应速度:在数据窗口使用 ...