ACM-UVA
CSU_CX
程序员一枚,渴望交流、渴望私活。。。
QQ:422803902
微信:hello_cx_hello
展开
-
UVA1416 Warfare And Logistics(LA4080)
首先用Dijkstra求出每对点距离; 以及每条边是否属于以某个点为单源的树上 然后枚举删除每条边: 之后对于每个单源,如果这条边在上面则重新对这个点dijkstra, 然后修改相应的边; 否则每个点到这个单源的最短距离肯定不变(在原C基础上修改) wrong了整整一天,原来是求与源点相邻的点时忘了会有重边的情况,坑死了…… #include #incl原创 2013-02-06 22:48:32 · 781 阅读 · 0 评论 -
UVA10881 Piotr's Ants
这道题主要有两个很重要的性质 1:拿两只蚂蚁来分析,他们若遇到则会掉头走,这种情况下可知他们的相对顺序是不变的;若他们没有相撞相对顺序更是不变的; 综合起来所有蚂蚁的相对顺序是不会变的,即若A在B左边,之后A还是在B左边 2:若我们只想求之后n只蚂蚁的n个位置,则两只蚂蚁相遇后可以当他们是互相穿透而过继续前进的,因为他们确实是相互代替对方的方向了 综合这两步就可以原创 2012-10-29 23:24:43 · 883 阅读 · 0 评论 -
UVA11078 Open Credit System
题目要求s[i] - s[j] ;( i 而对于每一个s[j], 对应的最大值就是max(s[i]) - s[j] ;( i 所以我们从头开始遍历max(s[i]) - s[j],并且时时更新max[s[i]]; 这样题目便只要O(n)便足够了 #include #include const int maxn = 100000+10; int tcase, n, mbefor原创 2012-11-04 18:34:18 · 611 阅读 · 0 评论 -
UVA 11549 Calculator Conundrum
这题很明显会存在一个循环节,我们所要做的就是找出这个循环节里最大的那个数; 利用佛洛依德判定圈,我们让两个循环child1和child2刚开始都为k,然后child1每次变换一次,child2每次变换2次; 这样当child1再次等于child2时说明已经至少经过一个循环节了,因为child2已经从后面赶上child1了 #include #include long long Max原创 2012-11-04 18:27:16 · 713 阅读 · 0 评论 -
UVA11478 Halum
2分法,对于最后能否达到x应满足每一对的: edge(u, v) + sum(u) - sum(v) >= x -->sum(v) -->d[v] -->模拟建图,判断是否有负环 注意:题目的目标是所有边的权值都大于0而不是非负 #include #include #include #include #include using namespace std;原创 2013-02-07 15:54:58 · 616 阅读 · 0 评论 -
UVA1494Qin Shi Huang's National Road System(LA5713)(HDU4081)
次小生成树的应用 总思路是枚举每条边作为那条免费的路; 当你确定一条免费的路之后,相当于在这两个点之间加了一条长度为0的边之后求MST; 根据刘汝佳所说,MST就是把所有环中的最大边删除,我们首先要求出MST 如果枚举的边属于MST,则他原来不是环上的最大边,现在也不是,该这条边为0后MST的结构不变,只是MST的总长度少了这条边的长度; 如果枚举的边不属于MST,则他原来肯定是某原创 2013-02-20 23:32:09 · 774 阅读 · 0 评论 -
UVA11354 Bond
很明显满足这个条件的路径就是最小生成树上链接两个点的那条唯一的路径 但是题目有50000个询问,如果单纯的在MST上DFS求值则每次查询的复杂度都是O(n),最后可能高达50000*50000 如果组成一棵有根树,每个点记录了父节点及与父节点距离,则任意两个点肯定会有一个共同祖先,所求的值就是两个点到共同祖先路径上最大边中的较大者, 我们只要记录每个点的深度,先将深度调到一样大,然后原创 2013-02-21 22:02:09 · 1202 阅读 · 0 评论