首页 > TAG信息列表 > dis
CF241E Flights 题解
CF241E 简要题意 \(n\) 个点,\(m\) 条有向边,每条边初始边权是 \(1\),让将一些边的边权变为 \(2\),使所有从点 \(1\) 到 \(n\) 的路径长度相等。 分析 首先发现如果一条边不在 \(1\) 到 \(n\) 的任意一条路径上,可以给它任意赋边权,因此只需考虑在 \(1\) 到 \(n\) 路径上的边。设 \(1\)ABC 267 F Exactly K Steps(树的直径,LCA倍增)
F Exactly K Steps 题目: 给出一棵n个点的树,边权为1,进行2e5次询问,每次输出任意一个离结点\(u\)距离为\(k\)的结点。 思路: 对于树上问题,我们的武器不多,而且时间复杂度为O(logn),可以尝试往里套知识点。对于一棵树来说,易知一个结点距离最远的结点是树的直径的两个端点中的一个。树的重量
树的重量 题目描述 树可以用来表示物种之间的进化关系。一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异。现在,一个重要的问题是,根据物种之间的距离,重构相应的“进化树”。 令N={1..n},用一个N上的矩阵M来定义树T。其中,矩阵M满足:对于任左偏树
左偏树 左偏树是一种具有堆的性质,支持在\(\log^2n\)时间内合并的数据结构 左偏树拥有两个属性:键值和距离 距离 定义 我们定义外节点为左孩子或右孩子为空的节点 外节点的距离为0 非外节点的距离是该节点到最近的外节点的距离,空节点的距离为-1 性质 一颗有n个节点的二叉树,根的距离COMPFEST 14 - Preliminary Online Mirror (Unrated, ICPC Rules, Teams Preferred)
比赛链接: https://codeforces.com/contest/1725 A. Accumulation of Dominoes 题意: \(n * m\) 的矩阵,从左上角开始,将 1 到 \(n * m\) 的数,放到矩阵中,先放第一行,从左到右,然后第二行,以此类推。问相邻且数字差为 1 的格子有多少个。 思路: 答案就是 \((m - 1) * n\),特判一下只有一列的题解 P2971【[USACO10HOL]Cow Politics G】
似乎是一个很简洁的新做法。 显然 \(k\) 个点集互不干扰,可以分开处理。 对于每个点集,首先取出两个点 \(u,v\) 作为最远的两个点(为表述方便下文称为直径),然后考虑向点集中加入点 \(w\) 的过程。我们计算出 \(d_1=\operatorname{dis}(u,v),d_2=\operatorname{dis}(u,w),d_3=\operatorCodeforces *2400 做题记录
CF1715E 题解 题意 一个带边权无向图,可以沿着边走,需要边权的花费或从任意点 \(u\) 飞到 \(v\),需要 \((u-v)^2\) 的花费。求从点 \(1\) 到所有 \(i\) 的最少花费。最多飞 \(k\) 次。 分析 一眼最短路 + dp。 发现 \(k\) 很小,可以枚举飞的次数,对于点 \(u\),可以是走到 \(u\),这种情况多次查询与树上点u距离为k的点,例题
https://atcoder.jp/contests/abc267/tasks/abc267_f 此题目首先有结论:距离树上任意一点距离最远的点,是直径的其中一个端点 https://www.cnblogs.com/ydUESTC/p/16664485.html 故对于一个查询u,k如果存在一个答案,则可以在u到端点L或R的路径中查找到(因为这两条路径已经包含最远路径stringstream搭配getline解决每行不定数量的输入问题
例题: https://www.acwing.com/problem/content/description/922/ 代码: #include<bits/stdc++.h> using namespace std; int m, n; bool A_M[510][510]; int dis[510]; int stop[510]; bool vis[510]; void BFS() { deque<int> que; que.push_back(1);Codeforces Round #816 (Div. 2)
\(\quad\) 今早头一次睡到了九点,大概昨天在健身房确实训练过度了,胸廓酸软,大腿一直颤抖。 \(\qquad\) 下午去了趟实验室,完成了我的第一个物联网程序虽然很水。慢慢试着用\(VS\quad CODE\)切题,效率一般,命令行与编译指令反而不知不觉间搞懂了……还是很垃圾,一整天只做出五道题,其中两最短路算法之 Dijkstra
部分内容参考了李煜东的《算法竞赛进阶指南》,在此声明。 单源最短路径 单源最短路径问题,是说,给定一张有向图(无向图)\(G=(V,E)\) ,\(V\) 是点集,\(E\) 是边集,\(|V|=n\),\(|E|=m\),节点是 \([1,n]\) 之间的连续整数,\((x,y,z)\) 描述一条从 \(x\) 到 \(y\) 边长为 \(z\) 的有向(无向)边树的直径
树的直径 给定一棵树,树的每条边都有一个权值,树中两点之间的距离定义为连接两点的路径上的边权之和。树上最远的两个节点之间的距离被称为树的直径,连接这两点的路径被称为树的最长链。后者通常也可称为直径,即直径既是一个数值概念,也可代指一条路径。 树的直径有两种求法,时间复杂度prim
朴素prim #include<bits/stdc++.h> using namespace std; const int N = 550, INF = 0x3f3f3f3f; int n, m, dis[N], g[N][N]; bool vis[N]; int prim() { memset(dis, 0x3f, sizeof dis); int res = 0; for(int i = 0; i < n; i ++ ) { inJ [NOIP2013]货车运输 lca 最大生成树 点和点之间所有路径最小值的最大值
链接:https://ac.nowcoder.com/acm/problem/16527来源:牛客网 题目描述 A 国有 n 座城市,编号从 1 到 n ,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运bellman_ford
#include<bits/stdc++.h> using namespace std; const int N = 505, M = 100010, INF = 0x3f3f3f3f; int n, m, dis[N], backup[N], k; struct edge { int f, t, l; edge(){} edge(int ff, int tt, int ll) { f = ff, t = tt, l = ll; } }C20220806T2 枚举计算
有 \(n\) 个点,求从1号点到 \(n\) 号点的最短路径,但有某些点有前驱,必须先到了前驱才能到达这个点,允许有多个点同时出发。 \(n\leq 3000,m\leq 30000\) 。 一看,这不是最短路吗?第二眼,这不是拓扑吗?于是,这道题思路就出来了。首先给每个点计一个 \(mintime\) ,表示最少要花 \(mintime\)跑路
P1613 跑路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:如果两点之间有边连接那么边为1,然后如果两点之间有2^n长度的路径,那么他们距离就变为1 dp数组标记i到j有无2^p的距离的边,如果有,其dis值更新为1 第一次floyd如果i到k有距离p-1,k到j有距离p-1的边,那么他们就有距离p的边8.27训练赛(2018-2019, ICPC, Asia Yokohama Regional Contest 2018,gym102082)
B 一开始开题的时候想假了,以为用map存差的结果贪心就行了,实际上是一个比较妙的dp,用到了一个结论:两项就唯一确定一个等差数列。 设\(f[i,j]\)表示最后两个数选了\(a_i\),\(a_j\)就可以定一个等差数列了,这就很优美地解决了公差没办法定义在状态里面的问题。 把序列排序一下,则转移点【Virt.Contest】CF1321(div.2)
第一次打虚拟赛。 CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\) 的位数 \(t2\)。 两个数都为 \(0\) 或都为 \(1\) 时没有贡献。 若 \(t1=0\),则 \(r\) 序列不管乘多大的 \(p\) 也不会比 \(b\)序列更大,所以直接输出 \(牛客小白月赛56 A-F
牛客小白月赛56 A-F https://ac.nowcoder.com/acm/contest/39100 一场简单的比赛就足以验证我是多么的弱智。。。 A- 阿宁的柠檬 求最大最小,签到。 注意会爆 \(int\) #include <bits/stdc++.h> #define int long long using namespace std; signed main () { int a, b, n;剑指 Offer II 112. 最长递增路径-----记忆化搜索
题目表述 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。 输入:matrix = [[9,9,4],[6,6,8],[2,1,1]] 输出:4 解释:最长递增路径为 [1, 2, 6, 9]。 记忆化10. 汽车加油问题(贪心)
题目描述: 一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。 对于给定的n和k个加油站位置,计算最少加油次数。 输入格式: 输入数据的第一行有2 个正整数n和k(n≤5000,k≤1000),表示汽常用 STL 整合
常用 STL 整合 一、vector vector 是 STL 提供的一种 内存连续,长度可变 的动态数组。 虽说动态数组,但 vector 的底层仍是定长数组。当数组大小不足时,vector 会倍增的申请、分配更多连续的空间。 定义 vector<int>h; 定义一个数据类型为 int 的 vector h。 需要头文件 #include<vecP1399 [NOI2013] 快餐店 题解
题目大意 求一棵基环树的重心。即一个点,使得树上到其距离最长的点到其的距离最短。注意,这个点不一定是一个节点,可以在树上的任意位置。输出树上到其距离最长的点到其的距离。 或者说求基环树最短的直径?(大雾 解题思路 显然,这颗基环树的直径只有两种情况:经过环和不经过环。 如果不经分层图跑最短路:适用于可以对一定数量的前k条边权可以免费 减半的时候 omk的空间
下层到上层的边不用建 从上层到下层就已经代表了做了一次选择 如果还能回到上层的话会出问题的 因为可以免费 k 次,所以我们要建 k+1 层图 在 k+1 层图上我们已经不能再往下了,即免费操作已用完 for(int i=1,x,y,z;i<=p;i++) { scanf("%d%d%d",&x,&y,&z); a