中山纪念中学NOIP2012 Fortuna 系列模拟赛 input solution

题意

给你一棵带边权的树,然后这棵树是某个完全图唯一的最小生成树。问原来的完全图中所有边可能的最小边权和是多少。完全图是任意两个点之间都有边相连的图。

Solution

n^3算法:kruscal 逆推枚举+并查集

O(n):带权并查集+sort

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #define ll long long
 5 using namespace std;
 6 inline void read(ll &k)
 7 {
 8     char c=getchar();ll f=1;k=0;
 9     while (c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar();
10     while (c>=‘0‘&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar();
11     k*=f;
12 }
13 const int maxn=20000+10;
14 struct aa{
15     ll a,b,w;
16 }qaq[maxn];
17 bool cmp(aa i,aa j)
18 {
19     return i.w<j.w;
20 }
21 ll T,n,sum[maxn],fa[maxn],a[maxn],b[maxn],w[maxn],ans;
22 ll gf(ll now)
23 {
24     return fa[now]==now?now:fa[now]=gf(fa[now]);
25 }
26 int main()
27 {
28     freopen("input.in","r",stdin);
29     freopen("input.out","w",stdout);
30     read(T);
31     while (T--)
32     {
33         ans=0;
34         read(n);
35         for (int i=1;i<=n;i++)fa[i]=i;
36         for (int i=1;i<=n;i++)sum[i]=1;
37         for (int i=1;i<n;i++)
38         {
39             read(qaq[i].a);
40             read(qaq[i].b);
41             read(qaq[i].w);
42         }
43         sort(qaq+1,qaq+n,cmp);
44         for (int i=1;i<n;i++)
45         {
46             ll aa=gf(qaq[i].a),bb=gf(qaq[i].b);
47             ans+=qaq[i].w+(qaq[i].w+1)*(sum[aa]*sum[bb]-1);
48             fa[aa]=fa[bb];
49             sum[bb]+=sum[aa];
50         }
51     //    if (!T)cout << sum[1] << " "<<sum[2]<<" "<<sum[3]<<endl;
52         printf("%lld\n",ans);
53     }
54 }

时间: 2024-10-07 13:48:17

中山纪念中学NOIP2012 Fortuna 系列模拟赛 input solution的相关文章

2016.05.14下午【2016纪念中学新初一】基础赛

前言: 这次考试,考的不是很理想,满分500,我只得了210,只能说自己太粗心了,很多可以得分的都丢掉了,后悔考试的时候没有很认真.总体来说,这次比赛的题目还算简单,最后一题稍微难一点,不过还是比较容易.                                      1.第一次OJ大战  题目描述:       信息学爱好者们都酷爱在OJ(OJ是Online Judge系统的简称,用来在线检测程序源代码的正确性)上刷题,东莞某中学的OJ因为同学们乱交程序,评测系统因此被卡得无法呼吸,

2017.9.23 NOIP2017 金秋杯系列模拟赛 day1 T1

回形遍历( calc .cpp/c/pas) 时间限制:1s内存 限制: 256MB [问题 描 述]给出一个 n*m 的棋盘,按如下方式遍历,请问(x,y)往后 z 步走到的是哪个格子. [输入]输入文件名为 calc.in.一行,包含五个整数:n,m,x,y,z[输出]输出文件名为 calc.out.输出一行,包含两个整数,表示所在格子的横纵坐标[输入输出样例] calc .in calc .out 4 5 3 0 5 2 4 [ 样例解释 ] [数据说明]对于 70%的数据,1<=n,m,

【状压dp】Trie 树 @中山纪念中学20170304

目录 Trie 树 PROBLEM 题目描述 输入 输出 样例输入 样例输出 SOLUTION CODE Trie 树 PROBLEM 题目描述 字母(Trie)树是一个表示一个字符串集合中所有字符串的前缀的数据结构,其有如下特征: 1.树的每一条边表示字母表中的一个字母 2.树根表示一个空的前缀 3.树上所有其他的节点都表示一个非空前缀,每一个节点表示的前缀为树 根到该节点的路径上所有字母依次连接而成的字符串. 4.一个节点的所有出边(节点到儿子节点的边)中不存在重复的字母. 现在Matej手

2014-9-9 NOIP模拟赛

东方幻想乡系列模拟赛Stage 1命题 Nettle审题 Barty ccy1991911 FlanS39 Wagner T2 高精除高精,从来没写过,不知道怎么写,我就用大数减小数ans次,果断超时. T4 Tarjan的板子题,好久没写,中间出现了一些小错误 ①是尽管有双向边,Tarjan函数中也不必排除双向边 ②Tarjan算法有时候不能一步完成,需要做最多n次,用循环解决 ③问题是关于这个题目的虽然输入n代表有n个点,但是下面的连边中有些点根本没出现过,所以设一个数组记录有效点. Pro

NOI模拟赛 Day1

[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧张起来!!! 好了不扯淡了...

Wannafly模拟赛5 A 思维 D 暴力

Wannafly模拟赛5 A   Split 题意:你有一个大小为??的??????????,每次你可以从你已有的??????????中选择一个大小不为1的??????????,设他的大小为??,然后把它分裂成??和??−??,其中1≤??<??,这样你获得的收益是??∗(??−??)给定??,??,求最少分裂几次才能得到至少??的收益. tags:做题全靠猜系列 1]首先要知道,如果要把一个数 s 分裂成几个固定的数,不管怎么分裂得到的收益是确定的. 这个稍微算几个例子就知道,比如 6 分裂成

【BZOJ】【2741】【FOTILE模拟赛】L

可持久化Trie+分块 神题……Orz zyf & lyd 首先我们先将整个序列搞个前缀异或和,那么某一段的异或和,就变成了两个数的异或和,所以我们就将询问[某个区间中最大的区间异或和]改变成[某个区间中 max(两个数的异或和)] 要是我们能将所有[l,r]的答案都预处理出来,那么我们就可以O(1)回答了:然而我们并不能. 一个常见的折中方案:分块! 这里先假设我们实现了一个神奇的函数ask(l,r,x),可以帮我们求出[l,r]这个区间中的数,与x最大的异或值. 我们不预处理所有的左端点,我

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 ... xor Aj),其中l<=i<=j<=r. 为了体现在线操作,对于一个询问(x,y):