
图论
TURNINING
太蒻了
展开
-
Codeforces Round #656 (Div. 3) E. Directing Edges
传送门题意:一个图,给你n个顶点,m条边,m条边中有些是有向的,有些是无向的。现在要求你把无向的边全部变成有向的边,能否使图最终无环?思路:先只看有向边,若原图已经有环那么肯定无解,若无环我们一定能通过拓扑序构造一个图使图无环。证明:先跑一个拓扑排序,对于一个无向的边,我们只要把边:从拓扑序小的指向拓扑序大的 就能保正不产生环(拓扑序的定义!)#include<bits/stdc++.h>using namespace std;#define lsn (u << 1)原创 2021-07-21 20:34:48 · 129 阅读 · 0 评论 -
树的直径
定义:图中所有最短路径的最大值即为「直径」。做法:两次dfs O(n)重要性质:树上任意一点的所能达到的最长距离的另一端点,必定是直径两端点之一。故求最长距离直接取两个直径端点到它的距离的max就行了。HDU 2196#include<bits/stdc++.h>using namespace std;#define lsn (u << 1)#define rsn (u << 1 | 1)#define mid (l + r >> 1)t原创 2021-07-15 10:36:14 · 142 阅读 · 0 评论 -
Educational Codeforces Round 110 (Rated for Div. 2) D. Playoff Tournament
传送门题意:给你含有2^k-1课节点的满二叉树,对于叶子节点权值:’?‘ = 2, ‘1’ = 1, ‘0’ = 1; 对于非叶子节点 ’?‘ = lsn + rsn, ‘1’ = rsn, ‘0’ = lsn(lsn, rsn分别对应左右节点的权值)。有q次查询,每次把某个节点的字符修改为 ?1 0 中的一个,求修改后根节点的点权。思路:因为只修改一个点,那么这个点影响的只有它的父亲节点,所以我们把每个节点的点权全部记录下来,然后对于修改后的节点向上递归,一直到根。 边递归边修改。k 最大为18 所以原创 2021-07-14 15:48:54 · 253 阅读 · 0 评论