2016 Multi-University Training Contest 1Abandoned country
qaq,现在内心真是各种草泥马。怪自己见识短浅。。。哎。。。
题意:
给你一幅图,然后求一个最小花费使得所有的点都连通(这就是最小生成树啊),然后在这棵树上【如果我要从任意起点到任意终点,这两个点不同,且这两个点的被选取概率都是一样,求一个最小的期望长度,我的神队友的解释就是树上所有任意不同点之间的边值都加起来然后除以边的数量】
思路:
①:最小生成树;
②:求一个所有边之和/边的数量,一个边的贡献,对总和的贡献,就是任意两点之和,这个边被加了多少次,那就用这个边把树分成两部分,一部分有a个点,一部分有b个。那这个边就被加了a*b个点,那这个边就被加了a*b个次。
= =、以上纯属YY,路人勿喷。
利用树的构造,查找儿子节点个数。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-6;
const double pi=acos(-1.0);
const int mod=998244353;
const LL INF=0x3f3f3f3f;
const int N=1e5+10;
struct asd{
int to;
int next;
};
asd q[N];
int head[N],tol;
int sz[N];
void add(int a,int b)
{
q[tol].to=b;
q[tol].next=head[a];
head[a]=tol++;
}
void dfs(int root,int father)
{
sz[root]=1;
for(int i=head[root];i!=-1;i=q[i].next)
{
int son=q[i].to;
if(son==father) continue;
dfs(son,root);
sz[root]+=sz[son];
}
}
int main()
{
int n,m;
while(1){
cin>>n>>m;
tol=0;
memset(head,-1,sizeof(head));
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
add(a,b);
add(b,a);
}
dfs(1,-1);
for(int i=2;i<=n;i++){
printf("第%d个点:\n",i);
printf("左:%d 右:%d\n",sz[i],n-sz[i]);
}
}
}
qaq , 实在看不懂就只能调试知道算法…然后就会知道这个算法就是找该节点的儿子数目(包括他本身)。
然后边的权值就是节点到前面那个父亲节点的距离。找儿子这波操作真是血亏。。。智障题。。
比赛的时候数组还开小了…T了N发还以为不行。。。虽然后来证明是不行。。。
瞎扔一份代码跑….
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-6;
const double pi=acos(-1.0);
const int mod=998244353;
const LL INF=0x3f3f3f3f;
const int N=1e5+10;
struct asd{
int x,y;
LL num;
};
struct ad{
LL w;
int to;
int next;
};
ad ma[N*20];
int tol,head[N*20];
asd qq[N*10];
asd q[N*10];
int pre[N];
int vis[N];
int n;
LL val[N];
int sb[N];
bool cmp(asd z,asd x)
{
if(z.num<x.num)
return 1;
return 0;
}
void Init()
{
for(int i=1;i<=n;i++)
pre[i]=i;
}
int Find(int x)
{
int r=x;
while(r!=pre[r])
{
r=pre[r];
}
int i=x,j;
while(pre[i]!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void add(int a,int b,LL c)
{
ma[tol].w=c;
ma[tol].to=b;
ma[tol].next=head[a];
head[a]=tol++;
}
void dfs(int u,int v)
{
sb[u]=1;
for(int i=head[u];i!=-1;i=ma[i].next){
int tt=ma[i].to;
if(tt==v) continue;
val[tt]=ma[i].w;
dfs(tt,u);
sb[u]+=sb[tt];
}
}
int main()
{
int t;
cin>>t;
while(t--){
int m,a,b;
LL c;
scanf("%d%d",&n,&m);
LL temp;
temp=(LL)n*(n-1)*0.5;
Init();
for(int i=0;i<m;i++)
{
scanf("%d%d%lld",&a,&b,&c);
q[i].x=a;
q[i].y=b;
q[i].num=c;
}
sort(q,q+m,cmp);
LL ans=0;
tol=0;
memset(head,-1,sizeof(head));
for(int i=0;i<m;i++)
{
int aa=Find(q[i].x);
int bb=Find(q[i].y);
if(aa!=bb)
{
add(q[i].x,q[i].y,q[i].num);
add(q[i].y,q[i].x,q[i].num);
pre[aa]=bb;
ans+=q[i].num;
}
}
dfs(1,0);
LL sum=0;
for(int i=2;i<=n;i++){
sum+=val[i]*sb[i]*(n-sb[i]);
}
if(n==1)
printf("%lld 0.00\n",ans);
else
printf("%lld %.2lf\n",ans,(double)sum/(double)temp);
}
return 0;
}
/*
100
4 6
1 2 1
2 3 2
3 4 3
4 1 4
1 3 5
2 4 6
5 4
1 2 1
3 4 2
2 3 3
2 5 4
6 5
1 6 4
1 2 3
2 5 2
2 3 1
3 4 2
*/
2016 Multi-University Training Contest 1Abandoned country的更多相关文章
- 2016 Al-Baath University Training Camp Contest-1
2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...
- 2016 Al-Baath University Training Camp Contest-1 E
Description ACM-SCPC-2017 is approaching every university is trying to do its best in order to be th ...
- 2016 Al-Baath University Training Camp Contest-1 A
Description Tourist likes competitive programming and he has his own Codeforces account. He particip ...
- 2016 Al-Baath University Training Camp Contest-1 J
Description X is fighting beasts in the forest, in order to have a better chance to survive he's gon ...
- 2016 Al-Baath University Training Camp Contest-1 I
Description It is raining again! Youssef really forgot that there is a chance of rain in March, so h ...
- 2016 Al-Baath University Training Camp Contest-1 H
Description You've possibly heard about 'The Endless River'. However, if not, we are introducing it ...
- 2016 Al-Baath University Training Camp Contest-1 G
Description The forces of evil are about to disappear since our hero is now on top on the tower of e ...
- 2016 Al-Baath University Training Camp Contest-1 F
Description Zaid has two words, a of length between 4 and 1000 and b of length 4 exactly. The word a ...
- 2016 Al-Baath University Training Camp Contest-1 D
Description X is well known artist, no one knows the secrete behind the beautiful paintings of X exc ...
随机推荐
- CS 和 BS 的区别和优缺点(转)
转自:http://www.cnblogs.com/scnuyz/p/5808808.html bs是浏览器(browser)和服务器(server) cs是静态客户端程序(client)和服务器(s ...
- C++学习总结 复习篇2
延续上一小节内容:下面继续讲解虚函数和多态 虚函数和多态 基类指针可以指向任何派生类的对象,但是不能调用派生类对象的成员. 但是,基类可以调用覆盖了虚函数的函数.(现在调用将来,这有问题,说明现在 ...
- 使用session来存储用户的登录信息
对存在cookie端数据进行加密处理,具体代码如下: <?php session_start(); //假设用户登录成功获得了以下用户数据 $userinfo = array( 'uid' =& ...
- Android(Linux)模拟按键、触摸屏等事件
前提: 在我们应用程序或者在写Android自己主动化測试时候经常会须要模拟实体按键,来给我们做測试用.这也是我要整理的目的. 基本的涉及的是Linux Input Event事件. 下面的样例基于A ...
- 漫谈程序猿系列:无BUG不生活
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- Codeforces Round #422 (Div. 2) E. Liar 后缀数组+RMQ+DP
E. Liar The first semester ended. You know, after the end of the first semester the holidays beg ...
- Does Hadoop require SSH?
https://wiki.apache.org/hadoop/FAQ#Does_Hadoop_require_SSH.3F Hadoop provided scripts (e.g., start-m ...
- PrintWrite
向文本输出流打印对象的格式化表示形式.此类实现在 PrintStream 中的所有 print 方法.它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入. 与 Print ...
- Hadoop MapReduce两种架构 以及 YARN
一.MRv1 Master - Slave 模式 存在JobTracker单点失败的问题,在YARN得到了解决. 主要包含4部分:JobTracker,TaskTracker,Task,Client ...
- SDIO卡 了解
SDIO接口是在SD接口基础上发展起来的,SDIO接口兼容SD接口.SDIO协议又在SD卡协议之上添加了CMD52(一般用来访问寄存器)和CMD53(字节和块传输)命令.SDIO和SD卡规范间的一个重 ...