
图论
文章平均质量分 52
,,,
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
acwing 1192 奖金(拓扑排序)
题面题解跑一遍拓扑排序求出所有编号在图中的前后关系dist[i]:表示i点在拓扑图中离起点的最远距离(可能存在多起点),dist[起点] == 100,边的权值为1代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e4 + 10, M = 2 * N;int n, m;int h[N], ne[M], e[M], idx;int d[N];int原创 2021-05-11 20:06:20 · 177 阅读 · 0 评论 -
acwing 1191 家谱树
题面题解(拓扑排序)拓扑图:在有向图中不存在环,并且边的指向都是从前指向后的(u->v,那么对于拓扑序u一定出现在v之前),本题直接拓扑排序即可对于输出字典序最小的方案,我们可以使用优先队列,每次先遍历字典序小的数对于图中n个点,最多有n*(n-1)/2条边代码#include<bits/stdc++.h>using namespace std;const int N = 110, M = N * N / 2;int n;int h[N], e[M],原创 2021-04-17 21:27:48 · 182 阅读 · 0 评论 -
acwing 848 有向图的拓扑序列 (求图是否有环)
题面题解==我们观察可以发现,对于一个有环图,这个环上的所有点入度都是不为0的,==根据这个性质,我们就可以让所有入度为0的点入队,然后再删除i->j的边(其实就是让d[j]–),当d[j]为0时,继续入队,这样如果没有环的话,我们可以让所有点都入队,最后只需要判断所有点是否已经都入队完成了,如果没有入队,说明存在环,当然,队列中的顺序就是拓扑序(拓扑序不唯一)代码#include<iostream>#include<cstdio>#include<原创 2021-03-05 19:29:25 · 153 阅读 · 0 评论 -
acwing 1171距离(离线LCA)
题面题解(Tarjan——离线求LCA)前置知识在线做法:读一个询问,处理一个,输出一个离线做法:读完全部询问,再全部处理完,再全部输出做法在深度优先遍历时,将所有点分成三大类2号点 :代表已经访问并结束回溯的点1号点 :代表正在进行dfs的点0号点 :代表还没有被访问的我们发现对于查询正在dfs的点和已经dfs过的点的最近公共祖先其实就是正在dfs路径上的点(图中绿色),那么我们就可以将所有已经dfs过的点进行合并这题让我们求两点之间的距离 :我们先预处理出所有点到原创 2021-04-11 18:04:32 · 174 阅读 · 0 评论 -
acwing 1172 祖孙询问(LCA)
题面题解定义向上标记法:O(n)从 x 向上走到根节点,并标记所有经过的点再从 y 向上出发,当第一次遇到被标记过的节点就是最近公共祖先倍增法 : 询问O(logn) 预处理O(nlogn)dep[i] : 代表 i 节点的深度 ,记根节点的深度为 1f[i] [k] : 表示 x 向上走 2k 步到达的点,若该点不存在f[x] [k] =0 ,例如 f[x] [0] 表示走20步,就是跳到了父节点预处理 :我们可以通过倍增来求出所有的k的情况,f[x][k] = f [原创 2021-04-11 10:33:58 · 132 阅读 · 0 评论