Link

  https://jzoj.net/senior/#main/show/2505

Description

  在幻想乡,藤原妹红是拥有不老不死能力的人类。虽然不喜欢与人们交流,妹红仍然保护着误入迷途竹林村民。由于妹红算得上是幻想乡最强的人类,对于她而言,迷途竹林的单向道路亦可以逆行。在妹红眼中,迷途竹林可以视为一个由N 个路口(编号1..N),M 条不同长度双向路连接的区域。妹红所在的红之自警队为了方便在迷途竹林中行动,绘制了一张特殊的迷途竹林地图,这张地图上只保留了N-1 条道路,这些道路保证了任意两个路口间有且仅有一条路径,并且满足所有保留的道路长度之和最小,我们称这些道路为『自警队道路』。现在妹红打算在其中一个连接有多条『自警队道路』的路口设立根据地,当去掉这个根据地所在路口后,就会出现某些路口间无法通过『自警队道路』相互连通的情况,我们认为这时仍然能够通过『自警队道路』连通的路口属于同一个『区域』。妹红希望最后每个『区域』的『自警队道路』总长尽可能平均,请计算出她应该选择哪一个路口作为根据地。

  (尽可能平均即权值最小,设每一块『区域』的路线总长为Length[i],平均路线长度为Avg=SUM{Length[i]}/区域数,权值d=Σ((Length[i]-Avg)^2))

  下例中红色的路口为妹红选择的根据地,实线边表示『自警队道路』,绿色虚线边表示非『自警队道路』,数字表示边权,『自警队道路』中相同颜色的实线边代表属于同一个『区域』:

Solution

  显然,我们可以跑一次最小生成树确定选哪n-1条边。

  对搞出来的这片森林,每棵树跑一次dfs,确定根,找这棵树上的节点他们的父亲和其深度,并且记录一下x的儿子们中的边的和。

  然后我们枚举每一个点,以他们为根。显然,它的贡献(大概说说,不对应题目的计算方法,大概是这样的)为他每个儿子的边长总和,他到每个儿子边长总和,以及比他深度更小的节点联通的边的边长总和。

  这个画个图就可以理解了,挺简单的。

Code

{$inline on}
var
min,sum,papa:real;
n,m,i,j,x,y,tot,tott,minn:longint;
a:array[..,..] of real;
dd,data:array[..] of real;
f,d,l,pre,ru,shen:array[..] of longint;
procedure insert(x,y:longint;z:real); inline;
begin
inc(tot);
d[tot]:=y;
dd[tot]:=z;
pre[tot]:=l[x];
l[x]:=tot;
inc(ru[y]);
end;
procedure q(l,r:longint); inline;
var
t,mid:real;
i,j:longint;
begin
i:=l;
j:=r;
mid:=a[(l+r) shr ,];
while i<j do
begin
while a[i,]<mid do inc(i);
while a[j,]>mid do dec(j); if i<=j then
begin
a[]:=a[i]; a[i]:=a[j]; a[j]:=a[]; inc(i); dec(j);
end;
end; if i<r then q(i,r);
if l<j then q(l,j);
end; function getfather(x:longint):longint; inline;
begin
if f[x]= then exit(x);
f[x]:=getfather(f[x]);
exit(f[x]);
end; procedure he(x,y:longint); inline;
var
fx,fy:longint;
begin
fx:=getfather(x);
fy:=getfather(y); if fx<>fy then
f[fx]:=fy; end; procedure search(now,q,du:longint); inline;
var
k:longint;
begin
shen[now]:=du;
k:=l[now]; while k<> do
begin
if d[k]<>q then
begin
search(d[k],now,du+); data[now]:=data[now]+data[d[k]]+dd[k];
end; k:=pre[k];
end;
end; function check(now:longint):real; inline;
var
k,quyushu:longint;
avg,ans,ttt:real;
begin
if ru[now]< then
exit(sum*sum); k:=l[now]; ans:=;
ttt:=;
quyushu:=; while k<> do
begin
inc(quyushu);
k:=pre[k];
end; avg:=sum/quyushu; k:=l[now]; while k<> do
begin
if shen[d[k]]>shen[now] then
begin
ans:=ans+sqr(data[d[k]]+dd[k]-avg);
ttt:=ttt+data[d[k]]+dd[k];
end; k:=pre[k];
end; ttt:=sum-ttt; ans:=ans+sqr(ttt-avg); exit(ans);
end;
begin
readln(n,m);
for i:= to m do
readln(a[i,],a[i,],a[i,]); q(,m); for i:= to m do
begin
x:=trunc(a[i,]);
y:=trunc(a[i,]);
if getfather(x)<>getfather(y) then
begin
he(x,y); insert(x,y,a[i,]);
insert(y,x,a[i,]); sum:=sum+a[i,];
end;
end; search(,,); min:=sum*sum; for i:= to n do
begin
papa:=check(i);
if papa<min then
begin
min:=papa; minn:=i;
end;
end; writeln(minn);
end.

[jzoj]2505.【NOIP2011模拟7.29】藤原妹红的更多相关文章

  1. [JZOJ 5888] [NOIP2018模拟9.29] GCD生成树 解题报告 (最大生成树+公约数)

    题目链接: http://172.16.0.132/senior/#main/show/5888 题目: 题解: 思路是这样的:两个数的最大公约数一定不会比这两个数的任意一个数大.因此我们把权值相等的 ...

  2. JZOJ 5184. 【NOIP2017提高组模拟6.29】Gift

    5184. [NOIP2017提高组模拟6.29]Gift (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  3. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  4. [jzoj NOIP2018模拟10.29]

    OI生涯的最高分,来了纪中这么多天,在经历了这么多场“NOIP难度”的模拟赛之后,终于看到了真正的NOIP 今天考场上效率很高,很快码完了全部的题目,留下了足够的时间对拍和...发呆.不得不说看着电脑 ...

  5. [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...

  6. [jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)

    题目链接: https://jzoj.net/senior/#main/show/6101 题目: 题解: 设$f_i$表示从节点$i$到节点$n$的期望时间,$f_n=0$ 最优策略就是如果从$i, ...

  7. [jzoj 6093] [GDOI2019模拟2019.3.30] 星辰大海 解题报告 (半平面交)

    题目链接: https://jzoj.net/senior/#contest/show/2686/2 题目: 题解: 说实话这题调试差不多花了我十小时,不过总算借着这道题大概了解了计算几何的基础知识 ...

  8. [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)

    题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...

  9. [jzoj 6092] [GDOI2019模拟2019.3.30] 附耳而至 解题报告 (平面图转对偶图+最小割)

    题目链接: https://jzoj.net/senior/#main/show/6092 题目: 知识点--平面图转对偶图 在求最小割的时候,我们可以把平面图转为对偶图,用最短路来求最小割,这样会比 ...

随机推荐

  1. webpack学习笔记——项目引入zepto及tap事件失效的解决

    先要npm下来zepto:npm install zepto 然后npm下来exports-loader和script-loader 配置如下: JavaScript // webpack.confi ...

  2. 关于Setup Factory 9的一些使用方法

    之前使用的VS自带的InstallShield2015LimitedEdition 打包工具,但是不太灵活,打包长得也难看:后来使用Setup Factory 9 打包winform应用程序,用起来轻 ...

  3. 避免’sudo echo x >’ 时’Permission denied’

    避免’sudo echo x >’ 时’Permission denied’ 甲: 示例sudo echo a > 1.txt-bash: 1.txt: Permission denied ...

  4. ES--06

    第51.初识搜索引擎_上机动手实战多搜索条件组合查询 课程大纲 GET /website/article/_search{ "query": { "bool": ...

  5. Mysql --数据的增删改

    插入数据 INSERT 更新数据 UPDATE 删除数据 DELETE 一. 在mysql管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 1.使用insert实现数据的插入 2.u ...

  6. Vs2013 使用EF6 连接mysql数据库

    最近在使用MySQL数据库,在使用EF框架连接MySQL数据库时发现了一个问题,使用DB First创建实体对象的时候会出现如下图的错误:您的项目引用了最新版实体框架….. (如下图)或者会出现新建实 ...

  7. Groovy闭包

    定义 闭包(Closure)是一种数据类型,它代表一段可执行的代码.它可以作为方法的参数,或者返回值,也可以独立运行,定义如下: def xxx = {parameters -> code}   ...

  8. 盒模型、position、float详解css重点汇总

    元素类型 HTML 的元素可以分为两种: 块级元素(block level element) 内联元素(inline element 有的人也叫它行内元素) 两者的区别在于以下三点: 块级元素会独占一 ...

  9. CSS选择器权重计算

    CSS各种选择器的权重: 1.ID选择器  +100 2.类.属性.伪类选择器   +10 3.元素.伪元素选择器   +1 4.其他选择器   +0 如果有两个CSS样式都作用于某元素,如: #id ...

  10. Java基础之中间件的初识

    java常用的中间件 一般本地开发的话建议使用tomcat.(小项目,或者是个人开发) linux系统建议使用jetty或apache hpptd 大型的项目或者商业项目就用JBOSS或webloig ...