士兵排队问题 Description 有N个士兵(1≤N≤26),编号依次为A,B,C,…,队列训练时,指挥官要把一些士兵从高到矮一次排成一行,但现在指挥官不能直接获得每个人的身高信息,只能获得“P1比P2高”这样的比较结果(P1、P2∈A,B,C,…,Z,记为 P1>P2),如”A>B”表示A比B高。 请编一程序,根据所得到的比较结果求
蓝书 AcWing 194. 涂满它! 比完赛后补题解 #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <iostream> using namespace std; typedef long long ll; typedef pair<int, int> pii; const int N = 1e5 + 10, I
DFS and BFS 一. DFS的基本概念 深度优先搜索(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当搜索遇到阻碍,如节点 的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点 的那条边的起始节点
P1902 刺杀大使 题目大意: 找出一条路径,使得从第 \(1\) 行到第 \(n\) 的上的最大值最小。 solution: 根据黑体字,很容易想到二分: 二分最大值,广搜验证。 细节处理: 广搜边界。 队列、标记初始化。 代码 #include<cstdio> #include<algorithm> #include<queue> #include<cstring> usi
题目描述: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: 输入:s = "bcabc" 输出:"abc" 示例 2: 输入:s = "cbacdcbc" 输出:"acdb" 提示: 1 <= s.length <= 10^4 s 由小写英文字
Johnson 算法 全源最短路径求解其实是单源最短路径的推广,求解单源最短路径的两种算法时间复杂度分别为: Dijkstra 单源最短路径算法:时间复杂度为 \(O(E + VlogV)\),要求权值非负; Bellman-Ford 单源最短路径算法:时间复杂度为 \(O(VE)\),适用于带负权值情况; 如果对全图顶点遍历,使用 D
由于某种莫名其妙的原因一定要把这道题调完。。。 设幸运数字的个数为 \(s\) 。 这个题目一共就没几个切入点,所以要么在每个幸运数字上做手脚,要么就枚举端点然后优化。 然后你套路地枚举最左边的端点,记为 \(l\) ,算出这样每个合法的区间总数是多少。 然后不知道怎么做,枚举左边区间
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。 输入描述 输入第一行是两个不超过 200200 的正整数 m, nm,n,表示矩阵的行和列。接下来 mm 行每行 nn 个整数,表示这个矩阵。 输出描述 输出只有一行,共 mnmn 个数,为
第一课时 复习及引入 质数判断 bool isPrime(int x){ if(x<2) return false; for(int i=2;i*i<=x;i++){ if(x%i==0) return false; } return true; } 复杂度分析 \(O(\sqrt{n})\) 引入问题,输入n(\(1\leq n\leq10^6\))个数字(\(0\leq x \leq 10^6\)),判断
语言 运算符的优先级:四则运算 \(>\) 关系运算 \(>\) 位运算 \(>\) 逻辑运算。 输出:尽量少混用;puts 会自动换行。 数组:尽量开最大使用\(+ 7\)。 局部变量要初始化。 memset 尽量只初始化 \(0\) 和 \(-1\)。 STL:无关紧要的少用(如存图,stack)。 算法 Tarjan:强连通分量 \(=\) 双连通
G - Reducing Delivery Cost 题意: 给你n个点和m条边以及每条边的权值 允许让一条边的权值变成0 然后有q次询问 求q次询问的xi到yi的最小路径和 思路: 显然是最短路的题 但是直接套最短路模板 枚举每条免费的边然后再dij每个点 来求 时间复杂度 是 n* m * k * log(m)会超时 所
/**\ 最短路模板 输入: n m s t 接下来m行 u, v, w表示u -> v 有一条权值为w的无向边 input: 3 3 1 2 1 2 3 2 3 4 1 3 5 output: 3 \**/ #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define go continue #define int long long #define
最近开始复习react内容,看到这块的时候想起来以前也没用过,就写了一个小例子看看,代码如下 import React from 'react'; class Tip extends React.Component{ render() { const pos = this.props.pos; console.log('ps', pos) return ( <d
例1 hdoj 1151 air raid 有一张有向图,一些伞兵可以落在任意位置,沿着有向边往前走。注意一条路仅能被一个伞兵经过 问最少派出多少个伞兵 题解 这是一个最小(不相交)路径覆盖问题,因为从每个点出发,下一步最多经过一条边,因此可以用二分匹配解决(可以想见) code #include<bits/stdc++.h>
题目连接 题目思路 如果不要去证明这个算法的正确性的话,我认为这只能算是一个简单贪心的dfs 可能一直被它高深的名字骗了没有去深入学习 时间复杂度\(O(nm)\) \(n\)代表点数,\(m\)代表边数 算法流程大概是如下 参考洛谷的题解 1.从任意一个没有被配对的点x开始,从点x的边中任意选一
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 X 星球的一处迷宫游乐场建在某个小山坡上。它是由 10 \times 1010×10 相互连通的小房间组成的。 房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则: LL 表示走到左边的
与此题很像https://blog.csdn.net/nnnnzhlll/article/details/123165403 最主要的还是一个check函数看它有没有被选择过 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int vis[10010]; int n; int a[10010]; int check[10010];
【洛谷 P5495】【数学】Dirichlet 前缀和 题目 解题思路 如果求出每一个数的因子然后累加必定TLE 可以先用埃氏筛求出质数 然后质数x对其的倍数y,a[y]+=a[y/x] 因为是从小到大,累加过去的,就能累加到所有除x的因子的数 代码 #include<iostream> #include<cstdio> using name
知识讲解: 图的遍历分为两种,深度遍历与广度遍历。这里讨论深度遍历。 以上图为例讨论图(图片来自《算法笔记》)的深度遍历: 设图形的顶点数为n。 先从顶点v0开始,用一个数组vis[n]来表示该顶点是否被访问,如果未被访问,vis[顶点编号]=0,否则为1.从v0开始访问,则vis[0]=1,v0可以连通v1与v
文章目录 题目描述输入描述输出描述输入输出样例最终代码c/c++深度优先法DFS广度优先法BFS(用队列实现) 过程理解 题目描述 你有一张某海域 N x N 像素的照片,"."表示海洋、“#"表示陆地,如下所示: ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"
重点在于剪枝,这个和 组合总和 的剪枝类似。 class Solution { vector<int> vis; public: void backtrack(vector<int>& nums, vector<vector<int>>& ans, int idx, vector<int>& perm) { if (idx == nums.size()) { a
添加链接描述 通过点将每个边相关联 每次暴力对每个点判断所连的边是否出现 #include<bits/stdc++.h> using namespace std; const int N=1e4+9; vector<int>v[N]; int n,m; int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; v[a].push_back(
迷宫问题的DFS和BFS解法 写在前面:通过迷宫问题来熟悉dfs和bfs解法,加深对于这两种搜索方式的理解与运用 DFS算法 注:DFS可以求第一条路径,也可以求最短路径 算法过程 dfs(顶点V) { 标记顶点V以遍历; for(对于每一个邻接V且未被标记的顶点u); dfs(u); } Map = [[
添加链接描述 #include<bits/stdc++.h> using namespace std; const int N=1e4+9; int fa[N]; int find(int x){ if(x==fa[x])return fa[x]; return fa[x]=find(fa[x]); } void merge(int x,int y){ x=find(x),y=find(y); if(x!=y)fa[y]=x; } int vis[N],cnt
题目来源:蓝桥杯算法训练 知识点:搜索、Floyd算法 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼。因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点。由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了,所以现在被妹