图论(含优先队列)
。。
2020100XWH
这个作者很懒,什么都没留下…
展开
-
换根呀呀啊呀
登录—专业IT笔试面试备考平台_牛客网 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+5000; struct edge{ ll to,next,w; }e[N*2]; ll head[N],tot,flow[N],deg[N],sum,ans[N]; void addedge(ll u,ll v,ll z) { e[tot].to=v; e[t原创 2022-05-31 16:02:30 · 61 阅读 · 0 评论 -
树上三点到一点最小距离和
1.距离的爬树考虑(先爬到lca再下去) 2.输入量大的时候注意快读加速很多 3.inline 4.对于处理分类讨论问题,结构清晰效率更高 5.倍增求lca 6.从简单情况画图分析 [AHOI2008]紧急集合 / 聚会 - 洛谷 #include<iostream> #include<cstring> #include<vector> #include<cstring> #include<cmath> #include<..原创 2022-03-18 17:20:11 · 560 阅读 · 0 评论 -
树的直径(
1.树的dfs遍历 2.一些重复的小操作避免复杂思考(舍 3.复杂度考虑 4.多线程问题,考虑能否分开处理,避免交叉复杂(本质是否影响)多种情况分开考虑清楚 5.一些贪心选择 [NOIP2007 提高组] 树网的核 - 洛谷 #include<iostream> #include<cstring> #include<vector> #include<cstring> #include<cmath> #include<a..原创 2022-03-16 16:02:44 · 89 阅读 · 0 评论 -
树链剖分(
小猪佩奇爬树 - 洛谷 1.倍增在线lca 2.父子链与非父子链(lca判断) 3.图论数据溢出(tmd真不好想,点乘点 4.由简入难 逐步讨论画图总结规律 #include<iostream> #include<cstring> #include<vector> #include<cstring> #include<cmath> #include<algorithm> using namespace std; c..原创 2022-03-16 03:23:56 · 192 阅读 · 0 评论 -
树的直径(
【XR-3】核心城市 - 洛谷 他解:拓扑排序,直接考虑 #include<bits/stdc++.h> using namespace std; const int N=1e5+50; typedef long long ll; int n,k; struct edge{ int to,nex; }e[N<<1]; int uu,vv; int deg[N]; int head[N]; int num=0; void add(int u,int v) { .原创 2022-03-12 23:57:00 · 151 阅读 · 0 评论 -
lca(tarjan离线)
预处理nlogn,查询o(1); 【模板】最近公共祖先(LCA) - 洛谷 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=5e5+50; int n,m,s,uu,vv; int head[N]; int que[N]; int fa[N]; struct edge{ int to,nex; }ee[N<<1],ce[N<<1]; int...原创 2022-03-11 17:28:01 · 148 阅读 · 0 评论 -
树的重心(
对于一个无根树,可以直接设定1为根节点(树可以以任何一个点作根) 从根dfs可以遍历以每个点为根的子树的节点个数,然后遍历每个点就是父节点-子树个数+(n-子树个数)找最小即数的重心 [NOIP2007 提高组] 树网的核 - 洛谷 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=5e4+50; int d[N]; int f[N]; int n; struct edge{原创 2022-03-11 10:43:22 · 60 阅读 · 0 评论 -
拓扑排序(访问层数,判断有无环)
通过看加入队列的元素个数和总元素个数判断有无环 通过记录队列访问层数得到最长链的长度 排序 - 洛谷 #include<bits/stdc++.h> using namespace std; int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<..原创 2022-03-09 17:07:59 · 193 阅读 · 0 评论 -
无限地图搜索
只需要求走到相同位置时的坐标不一样,加和不能记录坐标的唯一性,多开一维数组记录 幻象迷宫 - 洛谷 #include<bits/stdc++.h> using namespace std; int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9'原创 2022-03-09 14:58:23 · 54 阅读 · 0 评论 -
词链(((
1.连所有词 2."."小于所有小写字母,空小于有,即字典序 3.因为同字母可连边,所以把它们当作同一个点,每个词当作有向边,欧拉路处理(存在的充要条件) #include<bits/stdc++.h> using namespace std; struct one{ int to,num; }; string p[1005]; vector<one> a[30]; int tt[30][2]; bool cmp(string x,string y) { re原创 2022-03-08 09:58:01 · 45 阅读 · 0 评论 -
有向图的缩环操作(tarjan)
dfs结合low利用递归查找最大连通块,缩环。 对图的记录和访问,对每个点用边进行链表,找路径权值最值,拓扑排序更新 【模板】缩点 - 洛谷 #include<bits/stdc++.h> using namespace std; int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while(c>=原创 2022-03-04 12:09:44 · 252 阅读 · 0 评论 -
拓扑排序解决 有序处理问题
一共n个车站,给m行数,每次所给的车站等级大于未给者,要求分级最小划分数; 建立有向图,a[i][j]记录i小于j等级,记录每个点入度,入度为0的等级最低,加入队列,去点,减去所连点的度数,每一轮设置一个等级(!问题提取) #include<bits/stdc++.h> using namespace std; int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-原创 2022-03-02 09:11:16 · 63 阅读 · 0 评论 -
UVA11997
k组k个数各取1个前k小个和 简化为两个序列,一维排序,另一维取大小,在加入次大维护k个优先队列 对于多个序列,即为合成 #include<bits/stdc++.h> #pragma GCC diagnostic error "-std=c++11" #pragma GCC target("avx") #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma原创 2022-01-27 05:35:24 · 76 阅读 · 0 评论 -
LA3135
队列是动态数组(优先队列,自动排队动态,队列成员可以是结构体,优先级设定 using namespace std; struct one { int time,per,num; bool operator <(const one& a)const{ return time>a.time||(time==a.time&&num>a.num); } }; priority_queue<one>pq; int mai原创 2022-01-27 03:44:16 · 304 阅读 · 0 评论