2013年4月16日

Codeforce 295B Greg and Graph 活用Floyd 任意两点的最短路径

摘要: http://codeforces.com/problemset/problem/295/B该题就是活学活用Floyd,Floyd的本质是每次在原图中加入一个点,看是不是能用该点中间点使得一个点到另一个点的距离更小。比如现在有三个点,1,2,31直接到3的距离是10,1到2的距离是2,2到3的距离是2,那么本来初始状态时1到3的距离为1直接到3,距离为10,在加入了点2后容易发现,1先到2,2再到3,距离一共只有4,小于直接到达,所以1到3的最短距离修改为4依次考察每个点能否成为中间点从而缩短路径,在加入一个点后,更新所有点对的最短距离。所以当顶点个数为n时,复杂度为O(n^3).这个依次删除 阅读全文

posted @ 2013-04-16 16:40 allh123 阅读(269) 评论(0) 推荐(0) 编辑

HDU 1473 并查集 删除结点操作 建立虚拟根结点

摘要: 这个题显然是用并查集,主要是涉及到并查集中结点的删除,一般而言构造的并查集要独立出结点,直观的想法是直接修改它的父结点为自己,但这样会出现错误。它原来的子结点也跟着一起独立出来了,这和题目是不符合的(题目只要求独立出要独立的那个,它的孩子结点还是应该在本来的那棵树上),考察合并函数发现,合并时总是把一个集合的根结点作为另一个集合的根结点。之所以不好把某个结点直接独立出来是因为它本身还是别的点的父结点,而这种情况出现的原因就是自己做过根结点。为保证编号为0-n-1的结点永远只做叶子结点,只需要给它们找个虚拟的根结点即可,也就是说,当某个结点只含自己时的初试状态不是p[x] = x,而是p[x] 阅读全文

posted @ 2013-04-16 13:50 allh123 阅读(220) 评论(0) 推荐(0) 编辑

导航