jzoj2940. 生成输入数据

news/2024/11/25 4:15:31/

Description

首先看到题目别太开心,这题可不是让你出数据~^_*
背景神马的就忽略了。这题就是给你一棵带边权的树,然后这棵树是某个完全图唯一的最小生成树。问原来的完全图中所有边可能的最小边权和是多少。
完全图是任意两个点之间都有边相连的图。

Input

第一行包含一个整数T表示数据组数。
每组数据第一行一个整数N表示点数。
接下来N-1行每行三个整数ai,bi,wi表示最小生成树上ai和bi之间有一条权值为wi的边。

Output

输出应有T行,每行表示一组数据的答案。

Sample Input

2
3
1 2 4
2 3 7
4
1 2 1
1 3 1
1 4 2

Sample Output

19
12

Data Constraint

20%的数据满足:T≤5,n≤5,wi≤5
另外30%的数据满足:n≤1000,给定的树是一条链
100%的数据满足:T≤10,n≤20000,wi≤10000

题解

这里是一道小技巧题。
我们发现,由于MST是唯一的,那么我们就可以发现,任意不相邻的两点之间都有一条新边且这条新边正好是树上两点间路径最大值+1.
有点绕口。
然后,50分就很好打了。
先上个链剖
我们暴力枚举任意两点,然后统计答案即可。

100分呢?
先从小到大枚举边,把当前的边加入图中。
然后询问当前边所连通的两个连通块的大小分别是什么。
然后乘起来即可。
为什么?
由于我们是从小到大加入边的,所以我们当前的边两端的点之间若是要连接,那么必定经过当前边。
而且当前边是两点之间最大的边,所以可以直接乘起来加入答案。
利用并查集维护连通块大小即可。

很棒的一个小技巧!

代码

uses math;
vari,j,k,l,n,m,num,tot,ans,gs,a,b,c,o,xx,yy,jl,t:longint;f,v,x,y,z,father:array[1..150000] of longint;size:array[1..150000] of int64;answer:int64;
procedure qsort(l,r:longint);
vari,j:longint;mid,k:int64;
begini:=l;j:=r;mid:=z[(i+j) div 2];repeatwhile (z[i]<mid) do inc(i);while (z[j]>mid) do dec(j);if i<=j thenbegink:=z[i];z[i]:=z[j];z[j]:=k;k:=x[i];x[i]:=x[j];x[j]:=k;k:=y[i];y[i]:=y[j];y[j]:=k;inc(i);dec(j);end;until i>j;if l<j then qsort(l,j);if r>i then qsort(i,r);
end;
function getfather(x:longint):longint;
beginif father[x]=x then exit(x);father[x]:=getfather(father[x]);exit(father[x]);
end;
beginreadln(t);while t>0 dobegindec(t);readln(n);answer:=0;for i:=1 to n-1 dobeginreadln(x[i],y[i],z[i]);answer:=answer+z[i];end;qsort(1,n-1);for i:=1 to n dobeginfather[i]:=i;size[i]:=1;end;o:=0;for i:=1 to n-1 dobeginxx:=getfather(x[i]);yy:=getfather(y[i]);father[xx]:=yy;answer:=answer+(size[xx]*size[yy]-1)*(z[i]+1);size[yy]:=size[yy]+size[xx];end;writeln(answer);end;
end.

转载于:https://www.cnblogs.com/RainbowCrown/p/11148370.html


http://www.ppmy.cn/news/304069.html

相关文章

2940. 凤凰古城

单点时限: 2.0 sec 内存限制: 256 MB 凤凰古城&#xff0c;位于沱江之畔&#xff0c;群山环抱&#xff0c;关隘雄奇。碧绿的沱江依着城墙缓缓流淌&#xff0c;叠翠的南华山麓倒映江中。江中渔舟游船数点&#xff0c;山间暮鼓晨钟兼鸣&#xff0c;悬崖上的吊脚楼轻烟袅袅&…

hdu 2940

简单的大数乘法&#xff0c;直接改16进制~~ #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <algorithm> #define maxn 3010 #define INF 0x7fffffff #define ull unsigned long long using namespace std…

POJ - 2940

题目 As you may know from the comic “Asterix and the Chieftain’s Shield”, Gergovia consists of one street, and every inhabitant of the city is a wine salesman. You wonder how this economy works? Simple enough: everyone buys wine from other inhabitants …

poj 2940

Wine Trading in Gergovia Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 3187 Accepted: 1454 Description As you may know from the comic “Asterix and the Chieftain’s Shield”, Gergovia consists of one street, and every inhabitant of the city is …

BZOJ2940 条纹

条纹游戏是一个双人的游戏。所需要的物品有一个棋盘以及三种颜色的长方形条纹&#xff0c;这三种颜色分别是红色、绿色和蓝色。所有的红色条纹的尺寸是c*1&#xff0c;所有的绿色条纹的尺寸是z*1&#xff0c;所有的蓝色条纹的尺寸是n*1&#xff0c;这里c,z,n是正整数。每种颜色…

Linux Crash/Hang on Bay Trail/J1900/N2940

近几年的linux kernel, 尤其是4.1以后,在Bay Trail平台上会随机挂起和死机,亲测j1900,死机非常频繁,而且死机前毫无征兆,直接就挂起了,console也没有相应。 这个问题在bugzilla.kernel.org上已经吵翻了,从2015年年初,一直到现在,仍然没有彻底解决,临时方案有几个,但…

docker下载慢,卡顿解决办法——免费安装人人都有的docker加速器

点我获取阿里云免费镜像加速器 先确认一下docker版本>1.10.0 docker -v 人人都有免费哦~ 进入对应目录查看&#xff0c;我是root用户且没有 daemon.json文件 那就创建一个 vim daemon.json内容就是网页复制的那个 最后重启 systemctl daemon-reloadsystemctl restart do…

国内vscode高速下载

将vscode官方下载地址中的az764295.vo.msecnd.net替换为vscode.cdn.azure.cn 下边这个是改好的可以直接使用&#xff0c;下载速度起飞 https://vscode.cdn.azure.cn/stable/dfd34e8260c270da74b5c2d86d61aee4b6d56977/VSCodeUserSetup-x64-1.66.2.exe