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

讲讲比赛经过吧。

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. Lind.DDD.RedisClient~对StackExchange.Redis调用者的封装及多路复用技术

    回到目录 两雄争霸 使用StackExchange.Redis的原因是因为它开源,免费,而对于商业化的ServiceStack.Redis,它将一步步被前者取代,开源将是一种趋势,商业化也值得被我们尊 ...

  2. JavaScript模板引擎artTemplate.js——是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...

  3. Redis集群(九):Redis Sharding集群Redis节点主从切换后客户端自动重新连接

    上文介绍了Redis Sharding集群的使用,点击阅读 本文介绍当某个Redis节点的Master节点发生问题,发生主从切换时,Jedis怎样自动重连新的Master节点 ​一.步骤如下: 1.配 ...

  4. C# 在数组中判断是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  5. RN中listView的每个item等高

    今天写ListView的每个Item的布局的时候发现,当文字太长时被截掉了不能完全显示,检查了很久发现没有设置固定高度都是可伸缩的为什么没有伸缩呢.看了很久才发现每个item是等高的,于是仔细检查才看 ...

  6. 初次认识 C# win32 api

    第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...

  7. Python报错UnicodeDecodeError: ascii codec can t decode byte 0xe0 ...解决方法

    用命令(python setup.py install)安装webpy时候总是报错 在网上搜索到的解决方法如下: 1. 这是Python 2 mimetypes的bug 2. 需要将Python2.7 ...

  8. 【Phylab2.0】Beta版本项目展示

    团队成员 冯炜韬(PM)http://www.cnblogs.com/toka 岳桐宇(后端)http://www.cnblogs.com/mycraftmw 杨子琛(测试&LaTeX)htt ...

  9. PHP 信号管理

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  10. C++重载new和delete运算符

    内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...