- 博客(13)
- 收藏
- 关注
原创 网络流模板
最大流 int head[N], ver[N], Next[N], edge[N]; int tot, s, t, n, m; int d[N], now[N]; void init() { memset(head, 0, sizeof head); tot = 1; } void add(int u, int v, int w) { ver[++tot] = v, edge[tot] = w, Next[tot] = head[u], head[u] = tot; ver[++tot] = u,
2021-08-11 19:20:21
172
2
转载 2021-08-06
割点: vector<long long>g[N]; int dfn[N], low[N], cut[N], deep, tag[N], sz[N]; //dfn记录深度,low记录最近的根节点的深度,cut保存割点,sz记录割点消失后其中一个子连通块的点数个数。 // v:当前点 r:本次搜索树的root void tarjan(ll u, ll r) { //u是遍历到的节点. dfn[u] = low[u] = ++deep; ll child = 0; for (
2021-08-06 10:30:52
118
原创 组合数(逆元)模板
const int maxn = 5555, inf = 0x3f3f3f3f, mod = 1e9 + 7; ll fac[maxn*3]; ll inv[maxn*3]; int C(int m, int n) { if (m > n) return -1; return fac[n] * inv[m] % mod * inv[n - m] % mod; } ll quick_mod(ll n, ll m) { ll tmp = n % mod;
2021-08-05 14:07:42
210
原创 MK算法bfs优化模板O(n3)
#pragma warning(disable:4996) #include<iostream> #include<string.h> #include<queue> #include<stack> #include<math.h> #include<map> #include<set> #include<algorithm> #include<sstream> #include<vector&
2021-07-22 19:52:45
287
原创 2021-04-11
L. Queries on a String time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output A string s is given. Also there is a string p, and initially it is empty. You need to perform q operations of kind «add a lette
2021-04-11 01:16:22
130
原创 并查集---删除集合中的某个元素
链接:https://ac.nowcoder.com/acm/problem/15696 来源:牛客网 It’s universally acknowledged that there’re innumerable trees in the campus of HUST. Thus a professional tree manager is needed. Your task is to write a program to help manage the trees. Initially, there
2021-04-02 23:35:09
334
原创 关押罪犯(分多个集合!!)
链接:https://ac.nowcoder.com/acm/problem/16591 来源:牛客网 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c 的冲突事件。 每年年末,警察局会将本年内监狱中的所有冲突事件按影响力
2021-04-02 15:32:02
176
原创 最短Hamilton距离(二进制压状dp)
描述:给定一张n(n<=20)个点的带权无向图,点从0~n-1标号,求起点0到终点n-1的最短Hamilton路径。 Hamilton路径:从0~n-1重复不漏的经过每一个点恰好一次。 暴力做法:O(nn!) 二进制压状dp:O(nn*2^n). 关键数组dp[1<<20][20]; 在数组dp[i,j]中i通过二进制表示。i上的每一位数为一个节点,每一位数的值为0或1,表示未经过该节点和经过该节点。j为在遍历时每个节点是时,当时处于该节点,数组的值为目前0~j的最短路径。 例如:dp[1
2021-04-01 22:21:24
426
原创 Being a Good Boy in Spring Festival
题目: 分析:所有堆的异或为0时,先手必败;某个堆取出多少个石子时可以让所有堆的石子数异或值为0 让异或为0的方法:遍历每一堆,对于遍历到的某一个堆a[i],从a[i]中拿走每个堆的异或all^a[i] 那么a[i]剩下的就是(a[i]-all异或a[i]),最后得到all=all异或(a[i]-all^a[i])=0。 显然,如果最开始所有堆的异或不为0,那么就可以从某一堆中取一些石头,让所有堆异或为0,那么被拿石头的那一堆就得满足a[i]>all异或a[i]才能从a[i]中拿走all^a[i]个
2021-02-20 16:37:52
203
原创 2021-01-25
线段树 求此类问题关键找到要维护什么!! 建立树 struct tree{ int l, r;//树节点的左端点和右端点。结构体中可能还包含节点的一些特性,如区间的和sum等等。 } void build(int l, int r, int i) {//建立数据的左端点为l,右端点为r的节点。在main函数中第一次传入的i通常为1 node[i] = {l, r}; int mid = l + r >> 1; build(l, mid, i << 1); build
2021-01-25 22:22:16
127
原创 2021-01-22
二分求最值 今日的二分求最值搞得我头有点大,主要题目都是英文的,都没怎么看明白题目(最小值最大&&最大值最小)。 先来一波自己的理解23333: 题目一般要求在一段长度上面取走某个点或者是添加某个点,然后求出剩下的点的最大值的最小情况或最小值的最大情况。要二分得先排个序,在进行二分,第一次对线段的头和尾进行二分,然后逐渐进行二分,每一次二分的时候都要判断二分得到的值是否符合条件,如果符合条件那么就让二分的值更小或更大(具体看题),否则反之。如何判断符合条件呢?就要在外面设置一个函数,设jud
2021-01-23 00:12:51
211
1
原创 2021-01-21
查并集(第二天集训时光结束了,小累小累) 合并父节点:` void join(int x, int y) {//将x的父节点与y的父节点合并 if (cfind(x) != cfind(y)) { fa[cfind(x)] = cfind(y);//把x的最终父节点改为y的最终父节点,可实现将x路径与y路径合并。 } } 找父亲: int cfind(int x) {//普通查找 int r = x; while (fa[r] != r) { r = fa[r]; } return r
2021-01-21 23:28:42
143
原创 2021-01-20
map 题目:水果 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 直接输出map中的元素通过:(begin()+n)->first或(begin()+n)->second(第一个键值与第二个键值) #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<string> #inc
2021-01-20 21:55:46
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅