[jzoj]2505.【NOIP2011模拟7.29】藤原妹红

时间:2023-01-31 21:01:09

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))

  下例中红色的路口为妹红选择的根据地,实线边表示『自警队道路』,绿色虚线边表示非『自警队道路』,数字表示边权,『自警队道路』中相同颜色的实线边代表属于同一个『区域』:[jzoj]2505.【NOIP2011模拟7.29】藤原妹红

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. &lbrack;JZOJ 5888&rsqb; &lbrack;NOIP2018模拟9&period;29&rsqb; GCD生成树 解题报告 (最大生成树&plus;公约数)

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

  2. JZOJ 5184&period; 【NOIP2017提高组模拟6&period;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. &lbrack;jzoj NOIP2018模拟10&period;29&rsqb;

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

  5. &lbrack;jzoj 5664&rsqb; &lbrack;GDOI2018Day1模拟4&period;6&rsqb; 凫趋雀跃 解题报告&lpar;容斥原理&rpar;

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

  6. &lbrack;jzoj 6101&rsqb; &lbrack;GDOI2019模拟2019&period;4&period;2&rsqb; Path 解题报告 &lpar;期望&rpar;

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

  7. &lbrack;jzoj 6093&rsqb; &lbrack;GDOI2019模拟2019&period;3&period;30&rsqb; 星辰大海 解题报告 &lpar;半平面交&rpar;

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

  8. &lbrack;jzoj 6080&rsqb; &lbrack;GDOI2019模拟2019&period;3&period;23&rsqb; IOer 解题报告 &lpar;数学构造&rpar;

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

  9. &lbrack;jzoj 6092&rsqb; &lbrack;GDOI2019模拟2019&period;3&period;30&rsqb; 附耳而至 解题报告 &lpar;平面图转对偶图&plus;最小割&rpar;

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

随机推荐

  1. git 提交代码的流程

    [root@ok-T IT-DOC]# ls hx-海星-wifi.rd web收藏.txt [root@ok-T IT-DOC]# git status -s ?? "web\346\22 ...

  2. linux install

    http://www.ubuntu.org.cn/index_kylin 先在官网下个Ubuntu  是个iso 然后下个UltraISO 是个软件 插好空u盘 打开软件 在菜单栏上 点击 文件-&g ...

  3. html5音频和视频相关属性和方法

    方法 方法 描述 addTextTrack() 为音视频加入一个新的文本轨迹 canPlayType() 检查指定的音视频格式是否得到支持 load() 重新加载音视频标签 play() 播放音视频 ...

  4. vijos P1243 生产产品(单调队列&plus;DP)

      P1243生产产品   描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产 品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器 ...

  5. hdu1869六度分离&lpar;dijkstra&rpar;

    Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相 ...

  6. Eclipse中debug调试java代码一直报Source not found的解决办法

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  7. SQLServer复习文档1&lpar;with C&num;&rpar;

    目录: 前言 SQL Server基础准备 1.新建数据库 2.在数据中添加表 3.向表中添加数据 SQL Server与C#基础准备 实例解析 1.C#连接数据库 2.查询特定列数据 3.使用列别名 ...

  8. Redis&plus;Restful 构造序列号和压力测试【原创】

    [本人原创],欢迎交流和分享技术,转载请附上如下内容:如果你觉得这篇文章对你有帮助,请记得帮我点赞, 谢谢!作者:kevin[转自]http://www.cnblogs.com/itshare/ 很多 ...

  9. hdu1010 Tempter of the Bone---DFS&plus;奇偶剪枝

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目描述:根据地图,'S'为开始位置,'D'为门的位置,' . '为空地,'X'为墙,不能经过 ...

  10. css样式优先级和权重问题

    内联样式: <div style="font-size: 12px;">姓名</div> 外部样式: <link rel="styleshe ...