[Code+#4]最短路】的更多相关文章

[Code+#4]最短路 题目背景 在北纬 91° ,有一个神奇的国度,叫做企鹅国.这里的企鹅也有自己发达的文明,称为企鹅文明.因为企鹅只有黑白两种颜色,所以他们的数学也是以二进制为基础发展的. 比如早在 1110100111101001 年前,他们就有了异或这样一个数学概念.如果你不知道异或是什么,请出门过墙左转到这里. 再比如早在 10000101000010 年前,他们的大科学家 Penguin. Tu 就提出了图和最短路径这样一些概念. 题目描述 企鹅国中有 N 座城市,编号从 1 到…
Luogu · 传送门 Orz THU众大佬,lct(注意不是link-cut-tree,是一个大佬) 这道题很容易让人联想到 最短路,但是最短路需要先 建图: 暴力建出所有边的算法显然是不可行的,因为这样会建出 \(O(n^2 + m)\) 条边: 那么我们要考虑能不能 减少一些边 ,使边的数量可以接受. 从哪里入手减少边的数量呢?异或或许是一个不错的切入口. 举个栗子: 假设我们要从 \(001_2\) 到 \(010_2\),我们要花费 \(2^0 + 2^1\) 的费用: 但是,最短路有…
好久没写过博客了.... 本题还是挺有趣的(很水的最短路) 关键在于怎么优化这$n^2$条连边 通常,我们希望用一些边来替代一条边从而减小边集 那么,注意到异或操作可以拆分成按位运算,因此我们只需考虑$i$和每一位异或的结果连边即可 由于我们由$i$转移到$j$时,有可能中间节点$i \wedge t$是比$i$大的 因此,实际上我们应该带着$2^t$个点跑最短路,其中$2^t \geqslant n$ 然后就没什么了... #include <queue> #include <cstd…
题目背景 在北纬 91° ,有一个神奇的国度,叫做企鹅国.这里的企鹅也有自己发达的文明,称为企鹅文明.因为企鹅只有黑白两种颜色,所以他们的数学也是以二进制为基础发展的. 比如早在 111010011110100111101001 年前,他们就有了异或这样一个数学概念.如果你不知道异或是什么,请出门过墙左转到这里. 再比如早在 100001010000101000010 年前,他们的大科学家 Penguin. Tu 就提出了图和最短路径这样一些概念. 题目描述 企鹅国中有 NNN 座城市,编号从…
显然这里的$n^2$级别的边数不能全建出来,于是盯住xor这个关键点去 瞎猜 探究有没有什么特殊性质可以使得一些边没有必要建出来. 发现一个点经过一次xor $x$,花费$x$这么多代价(先不看$C$),到达另一个点$u\text{xor}x$. 结合异或性质,发现其实这个过程完全可以通过把$x$拆成一位一位去分别xor上$u$,也就是说,任何一个点到达另一个点只需要不断走$2^i$这种xor值就可以到达,于是每个点连出$logn$条边,分别和其序号二进制位每一位异或一个1的数相连.这样,如果要…
这个题思路十分巧妙,感觉很多题都有类似的套路. 我们发现异或操作其实就是将一个数的二进制的若干个 $0$ 变成 $1$,或者一些 $1$ 变成 $0$. 而每次按照某种顺序一位一位地异或也可以起到同时异或多位的结果. 所以我们每次只要把每个节点连到只该变一位的节点就可以了. 然后就直接跑一个最短路~ #include <cstdio> #include <algorithm> #include <cstring> #include <queue> #defi…
考虑xor运算的自反性 我们可以直接枚举二进制位异或来进行转移 这样边数大约是\(n \log n\)级别的 总复杂度\(\Theta((n\log n+m)\log n)\) #include"cstdio" #include"cstring" #include"iostream" #include"algorithm" using namespace std; const int MAXN=1e5+5; const int…
https://loj.ac/problem/6354 https://www.luogu.org/problemnew/show/P4366 题面见上面. 这题很妙,且可能是我傻,感觉这题不太好想. 前45pts很好骗就不说了. 朴素的建法是O(n^2+m)的,一个点都过不了. 然而事实上一个从x->y权值为w的边是可以被其他边取代的,我们可以把x拆成二进制,一位一位的修改最终到达y,此时经过的权值显然也是w. 也就是说,对于一个点x,我们只需要让他和x*2^k连边即可,这样就优化为O(nlo…
最短路问题,然而对于任意\(i,j\),从\(i\)到\(j\)可以只花费\((i xor j) \cdot C\) 对每个点\(i\),只考虑到\(j\)满足\(j=i xor 2^k, j \leq i\) 显然其它边可以由这些边组合得到 #include <bits/stdc++.h> using namespace std; #define int long long const int MAX_NODE = 500005; template <class T> class…
目录 [最短路+最大流]上学路线@安徽OI2006 PROBLEM SOLUTION CODE [最短路+最大流]上学路线@安徽OI2006 PROBLEM 洛谷P4300 SOLUTION 先在原图上跑单源最短路,找出包含所有最短路径的子图. 要使从S到T的最短路变长,那么在子图中S到T不再连通,要求代价最小,即在子图上找最小割. 因为"最小割等于最大流",所以在子图上跑一遍最大流. 自己犯蠢,最短路子图建的双向边,wa了好几发 CODE #include <bits/stdc…