这次打算法马拉松是在星期五的晚上,发挥还算正常(废话,剩下的题都不会= =)。

讲讲比赛经过吧。

8:00准时发题,拿到之后第一时间开始读。

A配对,看上去像是二分图最大权匹配,一看范围吓傻了,先跳过读后面的题。

B完全二叉树的方差,大概看了一遍,好神的样子,跳过。

C多项式?好吧没学过FFT和NTT的我肯定不会,跳跳跳。

D最大值,哎呦这函数什么破玩意儿,看不懂,跳跳跳。

E B君的射击,卧槽毕克大人您出题就算了出这么一道码农题是要闹那样,跳跳跳。

F那些年,我们一起讲的故事,卧槽这特么简直就是道纯语文题,跳跳跳。

哎等等,跳没了……

好像A比较简单,先想想A算了……

第一思路是二分图最大权匹配,然后费用流暴力,一看数据范围这显然不靠谱,然后就开始思考问题的特殊性质。

不经意间按了几下F5,卧槽怎么你们做的那么快,看来是我想复杂了,这应该是个不太难的题。

想了想匹配的构造方法,贪心似乎不太可行,别的方法一时也想不出来,算了好像可以枚举每条边计算贡献……感觉像是对的,但是又对此深表怀疑……

中间又按了几次F5,卧槽你们做题怎么这么神速……看来这题确实简单,反正WA了也不会有惩罚,看我码一发枚举边计算贡献,随手一交,啊哈居然A了……

自己交的比较早,所以是第18个A的(为什么我记得是第19个……还是说是第19个提交的……),排名还不错……(机房其他人好多都第几十+才A的……)

看了看其他题,E题貌似之前看少了连通的圆可以使中间那块也变成洞,感觉自己并不会写。F题读了半天还是没读懂……D题的函数看懂了就是十进制位倒过来然后乱搞,然而还是没思路。C题也看了两眼,一看别人的运行时间都是十几ms,感觉像是O(1)的结论题,打了一发print input()(这是Python2)然而过不去样例……

然后开始搞B题,看见方差最小感觉像是一个三分平均数然后二分图最小权匹配,搞了半天搞出来新树直径的结论,然而并没有推出题解的神贪心,写了一发三分平均数+最小费用最大流(二分图最小权匹配),然后不知道哪儿写挂了,样例都过不去(也可能是函数根本不单峰……)……调了半天调不出来,狠狠心一交,1W19T,算了我弃疗……

脑子昏昏涨涨,就此弃疗。星期六和星期天也没有再来做题,由于第一题交的早,最终成绩rank60,真是便宜我了。(然而排名太低,Rating往下掉了……= =)

随便水水比赛就拿到了排名是20的倍数这个buff,话说运气真是好……

话说今天才收到点头盾,这速度我给差评……

给A题贴个题解:

既然要求匹配点的距离和最大,那么两条路径一定要尽可能相交(如果不相交,交换两条路径的端点不会变劣)。或者说,匹配路径一定要尽可能经过长的边。不过这还是不太好搞,所以放弃构造方法,考虑对每条边计算能出现在几条匹配路径中,也就是说能对答案产生多少贡献。

考虑一条长为w的边,设这条边连接的两个连通块的大小分别为a和b。为了保证距离和最大,我们需要使得尽量多的匹配路径经过这条边,所以应该尽量让边两端的点进行匹配,因此这条边最多经过min{a,b}次。

边与边之间互不影响(我不会证……),所以一遍dfs/bfs之后枚举每条边计算贡献即可。为了保险(防爆栈),我用的是bfs。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=;
struct edge{int u,v,w;}e[maxn];
void bfs();
vector<int>G[maxn];
int n,q[maxn],prt[maxn]={},size[maxn]={};
long long ans=;
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
G[e[i].u].push_back(e[i].v);
G[e[i].v].push_back(e[i].u);
}
bfs();
for(int i=;i<n;i++){
if(prt[e[i].u]==e[i].v)swap(e[i].u,e[i].v);
int s=min(size[e[i].v],size[]-size[e[i].v]);
ans+=(long long)s*e[i].w;
}
printf("%lld",ans);
return ;
}
void bfs(){
int head=,tail=;
q[tail++]=;
while(head!=tail){
int x=q[head++];
size[x]=;
for(int i=;i<(int)G[x].size();i++)if(G[x][i]!=prt[x]){
prt[G[x][i]]=x;
q[tail++]=G[x][i];
}
}
for(int i=n;i;i--){
int x=q[i];
size[prt[x]]+=size[x];
}
}

附官方题解:

(话说构造法真的可行嘛……我仍然理解不了贪心构造……只会写O(n2m2)的费用流……囧囧囧)

反思:

这次打比赛的时候有点着急,B题也没有耐心仔细想/写,发挥并不太好。

A题看见别人神速过题之后就有点慌了,一改求稳的作风,凭着直觉交了一份代码,能A估计是运气。今后的比赛或者是考试一定要求稳,毕竟无缘无故掉了几十分上百分可是很要命的。

下一站,UOJ Test Round #2。

加油。

51Nod 算法马拉松21(迎新年)的更多相关文章

  1. 51NOD 算法马拉松8

    题目戳这里:51NOD算法马拉松8 某天晚上kpm在玩OSU!之余让我看一下B题...然后我就被坑进了51Nod... A.还是01串 水题..怎么乱写应该都可以.记个前缀和然后枚举就行了.时间复杂度 ...

  2. 51nod 算法马拉松 34 Problem D 区间求和2 (FFT加速卷积)

    题目链接  51nod 算法马拉松 34  Problem D 在这个题中$2$这个质数比较特殊,所以我们先特判$2$的情况,然后仅考虑大于等于$3$的奇数即可. 首先考虑任意一个点对$(i, j)$ ...

  3. 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3

    先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...

  4. 51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛

    OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了 神奇的故事就开始了: 晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就 ...

  5. 51Nod 算法马拉松23 开黑记

    惨啊……虽然开了半天黑,但是还是被dalao们踩了…… 第二次开黑,还是被卡在rank20了,我好菜啊……= = 写一写比赛经过吧…… 看到题之后习惯性都打开,A~D看上去似乎并没有什么思路,F应该是 ...

  6. 51Nod 算法马拉松22 开黑记

    这是一场惨烈的开黑大战,始于全机房开黑指望刷进rank前十拿钱的壮志,终于被各路神犇怒踩成rank20,差点200点头盾不保的落魄,想起将近一年前ad和zcg等学长挤进rank10的壮举,不由得唏嘘, ...

  7. 51nod算法马拉松12

    A 第K大区间 不妨考虑二分答案x,则问题转化成计算有多少个区间满足众数出现的次数>=x. 那么这个问题我们使用滑动窗口,枚举右端点,则左端点肯定单调递增,然后维护一个简单的数组就能资瓷添加元素 ...

  8. 51NOD 算法马拉松12

    OTZ做出题目的神犇..断断续续改完了在这里存一下思路吧 A题:第K大区间题意:定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 分析:二分答案mid,任务 ...

  9. 51nod算法马拉松 contest7

    A题 链接:http://www.51nod.com/contest/problem.html#!problemId=1417 推荐链接:http://blog.csdn.net/a837199685 ...

随机推荐

  1. FineUI(专业版)公测版发布(这速度,真TM快!)

    经过近一年的筹备.编码和测试,FineUI(专业版)公测版终于和大家见面了!现在就来体验一下专业版飞一般的速度吧:http://fineui.com/demo_pro/FineUI(专业版)首页:ht ...

  2. QR code 扩展生成二维码

    include './phpqrcode/phpqrcode.php';  //引入QR库 QRcode::png("leo", 'qrcode.png', 'L', 10);  ...

  3. Python 随机数用法

    1. random.seed(int) 给随机数对象一个种子值,用于产生随机序列. 对于同一个种子值的输入,之后产生的随机数序列也一样. 通常是把时间秒数等变化值作为种子值,达到每次运行产生的随机系列 ...

  4. 北京培训记day1

    数学什么的....简直是丧心病狂啊好不好 引入:Q1:前n个数中最多能取几个,使得没有一个数是另一个的倍数   答案:(n/2)上取整 p.s.取后n/2个就好了 Q2:在Q1条件下,和最小为多少 答 ...

  5. 自己封装的常用NPOI文件导出源码

    示例: 1. 2.示例2 源码下载地址:https://github.com/aa1356889/NPOICode

  6. SLES 11 SP3防火墙设置

    防火墙简介 SLES 11 SP3 系统安装后,防火墙一般是启动的,它有两个服务:SuSEfirewall2_setup.SuSEfirewall2_init 关闭防火墙 # 方法一 rcSuSEfi ...

  7. ASE周会记录

    本周Sprint Master Atma Hou 一. 本周会议概要 本次会议的主要任务是明确和老师讨论后的数据库设计定稿,同时为我们接下来的连接工作确定包含实现细节的story和接口. 二. 会议内 ...

  8. 企业SOA架构设计理论

    SOA简介 SOA(Service-Oriented Architecture,面向服务架构)是一种将信息系统模块化为服务的架构风格.拥有了服务之后,我们就可以迅速地将这些服务按不同方式重新组合,从而 ...

  9. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  10. 总结libevent安装方法

    1.先用:ls -al /usr/lib | grep libevent  查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent -nodeps 进行卸载. 2.下载l ...