首页 > TAG信息列表 > ne

皇宫看守

原题链接 树形DP + 状态机 对于每个节点u有三种情况: 1.u点放置哨兵,u被自己观察到,那么u的子节点可放可不放,取min 2.u不放哨兵,但是u的任一子节点放置了哨兵,u被子节点观察到 3.u不放哨兵,u的父节点放置了哨兵,u被父节点观察到,那么u的子节点可放可不放 所以状态机定义三种模型 状态表示:

【链表、队列】约瑟夫环问题

3253. 游戏 #include <iostream> #include <queue> using namespace std; int n, k; bool check(int x) { if (x % k == 0 || (x % 10) == k) return true; return false; } int main() { cin >> n >> k; queue<int> q;

求期望【一】

题目 假设有10种物品,问平均需要抽多少次,才能把所有物品都抽到一遍? 分析 首先要知道 \(Min-Max\) 容斥: \(min(S) = \sum_{\varnothing \ne T\subseteq S} (−1)^{|T|+1}max(T)\) \(max(S) = \sum_{\varnothing \ne T\subseteq S} (−1)^{|T|+1}min(T)\) \(kthmax(S)=\sum_{\varn

给定一个无向图 求最少加多少条路径(任意两点可以两条路径走到) 可以变成双连通分量 (cnt+1)/2

无向图 缩点后 变成 一颗树 叶子结点就是 出度为0 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 5010,M=20010; int n,m; int h[N], e[M], ne[M], idx; int dfn[N], low[N], timestamp; // 时间戳 int stk[N], top; int id[

Period UVA - 1328

思路 注意重复字符串可以重叠!!!比如 \(aba\) 重复两次就可以是 \(ababa\) 。 代码 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 1000010; int test_case = 1; int n; string s; int ne[N]; int main () { while (cin >>

二分图

二分图 可以将一个图分为两部分,这两部分内部没有边,都是由一部分连向另外一部分 那么就称这个图为二分图 染色法判别二分图 如何判断二分图 不含奇数环是一个充要条件 只要没有奇数环,就是一个二分图,只要是一个二分图,就没有奇数环 所以我们可以通过染色的方式来判别一个图是不是二

Educational Codeforces Round 134 (Rated for Div. 2)

Educational Codeforces Round 134 (Rated for Div. 2) D. Maximum AND 题目大意 给出序列a,b,b可以任意排列,序列c有\(c_i=a_i\bigoplus b_i\)。c序列的价值为c1&c2&c33...&cn 分析 不难想到,从高到底考虑,每一个\(a_i\)与\(b_i\)对应二进制位。假设考虑的是其中bit位,则需要所有的\(a

OI中的一些数学小技巧

在OI比赛中,如果能够灵活地运用一些数学小技巧,是能够很好地优化计算的时间和正确性的。 既然说了是小技巧,那么这些指的都是一些技巧,一般是不会单独成题的。 光速幂 有的时候,我们要去求解一个数或者一个矩阵的若干次幂,而这个指数在一般情况下是暴力无法接受的,这个时候我们会想到使用

rust f64 比较

    (val1 - val2).abs() < f64::EPSILON     val1.to_ne_bytes() == val2.to_ne_bytes() 或者   val1.to_bits() == val2.to_bits()

CF1294C

题目简化和分析: 使得 \(a \times b\times c=n~~~~(a\ne b\ne c)\) 思路: 先枚举最小的 \(a\) ,(以下程序的返回值为最小因数(有部分优化),即 \(a\) 的值) int query(int n){ if(n%2==0) return 2; for(int i=3;i<=sqrt(n);i+=2){ if(n%i==0) return i; } return n; } 再枚举最

等比数列前n项求和公式证明

\[设等比数列a_{n}=ar^{n-1},首项为a_{1},r为公比,n\in N^{*}.\\ 求其前n项之和(设为s_{n}) \]\[\\ \\ \]\[s_{n}=a_{1}+a_{2}+a_{3}+...+a_{n}=a_{1}r^0+a_{1}r^{1}+a_{1}r^{2}+...+a_{1}r^{n-1} \]\[\\ \\ \]\[设s_{u}=r \cdot s_{n} \\ =r(a_{1}r^{0}+a_{1}r^{1}+a_{1}

拉格朗日插值

拉格朗日插值 定义: 什么是插值? 百度百科上这样写: 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。 [1] 插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。 插值:用来填充图像变换时像素之间的空隙。

[AcWing 1076] 迷宫问题

BFS + 记录方案 点击查看代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1000 + 10; #define x first #define y second int n; int g[N][N]; int dx[] = {-1, 0, 1, 0}; int dy[] = {0, 1, 0, -1}; pair<int,int> ne[N][N

AcWing 4273. 链表合并 (链表)

PTA真的老喜欢出这种链表题欸 也好,涨知识了哦呦 e存储当前地址的值 ne存储当前节点地址的下一个地址 #include<bits/stdc++.h> using namespace std; const int N=200200; int e[N],ne[N]; int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(false); int

搜索

定义:       基本框架 int dfs(int u) // 保证进入dfs为有效且未访问状态,在进入dfs之后标记 { st[u] = true; // 标记 for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (!st[j]) dfs(j); // 如果是无效状态或访问过,不进入 } }

AcWing 2022.7.20

链表模拟 + 队列模拟 可以用队列模拟,维护未弹出的数据和顺序。 也可以直接按题目要求维护循环队列,只需要单链表就够了。 队列: #include <bits/stdc++.h> using namespace std; const int N = 60; int T; int n; int ne[N]; int main() { cin >> T; while (T--) { cin >> n;

一个题的N种解法

营救 这个题的大概意思:n个小区,m条路,每个路有一个拥挤值,从s到t,使拥挤值最大值的最小是多少 第一种解法 堆优化版dijkstra 将判断条件改一下就行 点击查看代码 #include <iostream> #include <queue> using namespace std; const int N = 1e4+10,M = 4e4+10; int h[N],ne[M],e[M]

染色法判定是否是二分图

算法思路:使用深度优先遍历遍历整张图,如果发现某个顶点已经染过色,并且和相邻顶点的颜色相同,则返回false,否则一直染下去,直到遍历完整张图。 代码实现: #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 100010, M = 2 * N; int h

391 基环树 P2607 [ZJOI2008] 骑士

视频链接: // Luogu P2607 [ZJOI2008] 骑士 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=1e6+10; typedef long long LL; int n; struct edge{int v,ne;}e[N]; int h[N],w[N],idx; int r1,r2,vis[N]; LL f[N

拉格朗日差值学习笔记&做题记录

好像是多项式最基础的算法(?,但是咕了比较久,现在学一下吧。 差值是啥 这个东西类似于 FFT 的转化过程,就是多项式点值和多项式系数的转化,简而言之就是解决下面的问题,P4781。 已知一个 \(n-1\) 次多项式的 \(n\) 个点值,\(f(x_i)=y_i\),已知 \(k\),求 \(f(k)\bmod 998244353\)。 \(n\le 2

AcWing 2237. 猪

POJ 1149 Pig/AcWing2237 猪 分析 本题还是蛮有意思的,我们来理顺一下思维过程。 我们总结一下,题目的操作。 每名顾客按顺序进行 将自己有钥匙的猪舍打开,从中挑选一些不超过自己想买的数量的猪。 同时可以将,打开的猪舍中的猪进行调整 这里面,我们需要一个逆向思维 我们考虑打开的

2240. 餐饮

2240. 餐饮 分析 网络流经典优化。 拆点 网络流中拆点,特指将点拆开为入点与出点,以此来限制经过点的流量 网络流建图 将点拆为入点与出点 从入点向出点连接一条容量为限制的边 本题,就非常简单了,直接将牛拆点。 AC_code #include<bits/stdc++.h> using namespace std; const int

KMP

KMP kmp算法分为两部分 1.拿原串和模式串匹配(用i表示) 2.给模式串求p数组(模式串指针用j表示) 最难理解的因该是求模式串的p数组,这个数组的含义是当i+1位和j+1位无法匹配时,第i位最大还可以匹配的j位模式串 求法b站的那个留学生讲的比较清楚网址留下 KMP字符串匹配算法2哔哩哔哩bilibi

圆桌问题

圆桌问题 分析 二分图多重最大匹配 与二分图最大匹配的最大不同为: 二分图最大匹配中,左右两个点都只能被用一次,而在多重匹配中,左右的点都可以多次被用 网络流建图 从源点向左边点连一条容量为\(L_i\)的边 从所有右边的点向汇点连一条容量为\(R_i\)的边 将中间的所有连接,从左边点向

飞行员配对方案问题

P2756 飞行员配对方案问题 分析 经典模型,二分图求最大匹配 用匈牙利时间复杂度为\(O(n^3)\),用网络流\(O(m\sqrt{n})\) 直接说 网络流建图 从源点向左边点连一条容量为1的边 从所有右边的点向汇点连一条容量为1的边 将中间的所有连接,从左边点向右边点连接一条容量为1的边 确定方