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

讲讲比赛经过吧。

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. HTTP服务器(2)

    导语 重定向器是特殊用途的HTTP服务器的另一个简单而有用的应用程序.它的作用就是将用户从一个WEB网站重定向到另外一个网站.下面是一个简单的例子,程序沿用上一个SingleHttpServer代码. ...

  2. 查看mysql语句运行时间的2种方法

    网站运行很慢的时候,我就特别起知道为什么这么慢,所以我查啊查,数据库绝对是很重要的一部分,里面运行的sql是绝对不能放过的.平时做项目的时候,我也会注意sql语句的书写,写出一些高效的sql来,所以我 ...

  3. mysql 多版本并发控制

    查看事务隔离级别 SHOW VARIABLES LIKE "%iso%" MVCC 通过给每张表多加两个隐藏列来实现,一个保存了行的创建时间,一个保存了行的过期时间(或删除时间), ...

  4. 1.ios synthesize有什么作用

    ###1.ios synthesize有什么作用 当定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,所以Xcode提供了@property和@synthe ...

  5. 玩转Redis之Window安装使用(干货)

    距离上次定Gc.Db框架,好久没有更新博客了,今日没什么事,就打算就Redis写点东西. Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符 ...

  6. 进度条投票-W

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. python3使用pyinstaller打包apscheduler出的错

    本来只是想用Python做一个定时任务小工具在服务器上运行,可是服务器在隔离区,各种禁止上外网,使用pip导出列表那种下载库的方法不管用,导致Python的各种库都下不到,官网离线下载又各种缺依赖,好 ...

  8. 源码编译安装postgresql

    依赖的库:libreadline-dev,zlib1g-dev 安装:下载解压源码包,然后 ./configure,make,make install即可.. 注意不能在root账户下跑server, ...

  9. 设置session,cookies

    Cookie cookie = new Cookie("username",username); cookie.setMaxAge(60 * 60 * 24 * 365 * 2); ...

  10. chose.jquery 多选

    <select id="language" data-placeholder="选择类别..." class="chosen-select&qu ...