今天中午,很痛快地哭了一场。我并不觉得这是什么丢人的事情,即便说出来。 真的很伤心,但却和自己没什么关系,我自己好得很。只是非常突然的对这个世界感到绝望,感到世界太污浊,感到自己和身边的所有人从来没有作为一个“人”活着过。感到一切都不过是蝇头蜗角,感到一切的纷扰都没有意义。“天地不仁,视万物为刍狗。”一切的高兴和悲哀,都将在漫长的无限中寂灭,就连曾经拥有的曾经拥有,也会不复存在。无法作为一个“人”活着,这自然是悲哀,但即便能真正的“人”一样活着,又有什么意义? 我对妈妈说:“你把我带到这个世界上,为什么不问问我愿不愿意来?” 妈妈说,一切的一切,都源于我内心的自卑。 …… 不过不用替我担心,哭过以后就好了,现在我真的已经没事了。
从此,又多了一个城市,它在浩如烟海的黯淡的城市群体中脱颖而出,清晰起来,明亮起来。 我说不出“哪里有你哪里就是天堂”这样矫情的语言,可是,你的确已经让这个曾经平凡的城市变得与众不同。 谢谢你,在最后一小时打给我。谢谢你,真的。
最小树形图就是给定一个有向图,求以某个给定顶点为根的有向生成树(也就是说沿着这N-1条有向边可以从根走到任意点),使权和最小。 解决这个问题有一个O(VE)的算法,是这样的:对于除根外的每个顶点,选择一条权最小的入边。如果选出来的V-1条边不构成环,则可以证明这些边就是满足要求的答案。如果存在环,则将环中的边收缩成一个顶点。设x是环中的点,y不是环中的点,v为新的顶点,w0为上一步中x选择的入边的权值,则原来的权值为w的边(x,y)变成权值为w的边(v,y),原来的权值为w的边(y,x)变成权值为w-w0的边(y,v)。这时最小树形图的答案就是环的权值和加上收缩以后的图的答案。 为什么收缩了以后要减小权值呢?很简单,最小树形图需要每个顶点选一条入边,顶点x当前已经有入边了,如果以后再给收缩后的顶点x选择权值为w的(原来属于x的)入边,就意味着已经选择的那条权值为w0的入边可以去掉了,也就是说选择这条边的代价应该是w-w0,所以就做这样的修改。 不过如果不固定根,我还不太知道如何用同样的复杂度解决,谁写过请教教我。 (发现自己最近表达能力很差,这个文章说得清楚些。) 示例程序(TJU2248,用邻接矩阵写的,O(V^3),比较简洁): tju2248.cpp
对于我这种人来说,如果想让我踏踏实实的进行一个长期计划,最好的办法就是把这个计划让全世界的人都知道。比如说我准备做USACO和SGU的时候,就专门各开了一个发布题解的blog,这样我做了多少题目老师、同学、朋友甚至父母每天都能看到,我也就一点不敢松懈了。现在USACO征程完成了,SGU之旅做了80+(窃以为Chapter I/II中最有价值的题目都做了),于是我又打算做SPOJ了。 SPOJ真是一个非常非常好的OJ,网站的架构和理念非常先进。超级无敌的多语言支持就无需赘述了。还有一些很贴心的功能,比如说它会保留你每次提交的源文件,可以自己下载自己以前的代码,而且若选择了邮件通知功能,还会把每次提交的代码作为附件发给你。另外像调整宽度、换肤、提供每题的PS/PDF等小细节都很令人赞叹。这的确是我看到的最完美的OJ系统,在上面做题的确非常舒服。 好了,说了这么多,只是为了督促自己努力做题。除了学些新算法(其实需要学的已经为数不多)以外,更重要的是训练自己的代码风格变得严谨,彻底改变以前那种狂提交的做题方式,提高一次AC率,顺便还能给这个题解很缺乏的OJ贡献一份尽量丰富的题解。考虑到我的blog已经着实不少,就不再为这个OJ新开blog了,请通过这个页面监督我的做题情况!