寒假训练
THE END GAME
这个作者很懒,什么都没留下…
展开
-
染色和拓扑排序
邻接矩阵判定二分图:一个无向图为二分图当且仅当图G中无奇数长度的回路。#include <queue>#include <cstring>#include <iostream>using namespace std;const int N = 999;int col[N], Map[N][N];//0为白色,1为黑色bool BFS(int...原创 2019-02-19 01:18:45 · 244 阅读 · 0 评论 -
树状数组及应用
处理区间问题的常用方法(很麻烦)//树状数组//单点修改,区间查询//单点查询,区间修改//时空复杂度(O(m*log2(n)),O(n))#include <bits/stdc++.h>using namespace std;const int N=1000000+5;int a[N];int c[N];int lowbit(int x){ retur...原创 2019-02-19 01:25:46 · 134 阅读 · 0 评论 -
并查集入门
#include <iostream>using namespace std;#define N 105int pre[N]; //每个结点int ranks[N]; //树的高度//初始化void init(int n) //对n个结点初始化{ for(int i = 1; i <=n; i++){ pre[i] ...原创 2019-02-14 16:45:26 · 82 阅读 · 0 评论 -
数据结构——树以及线段树
#include<bits/stdc++.h>using namespace std;const int N=1e6+5;int a[N];int lazy[N*4];int tree[N*4];void push_up(int rt){ tree[rt]=tree[rt<<1]+tree[rt<<1|1];}void push...原创 2019-08-04 09:34:56 · 252 阅读 · 1 评论 -
单调栈&单调队列入门
对于单调队列,我们这样子来定义:1、维护区间最值2、去除冗杂状态 如上题,区间中的两个元素a[i],a[j](假设现在再求最大值)若 j>i且a[j]>=a[i] ,a[j]比a[i]还大而且还在后面(目前a[j]留在队列肯定比a[i]有用,因为你是往后推, 核心思想 !!!)3、保持队列单调,最大值是单调递减序列,最小值反之4、最优选择在队首单调队列实现的大致过程:1、...转载 2019-05-21 20:19:19 · 141 阅读 · 0 评论 -
关同步/读入优化
为了加快C++读入大数据的速度,可以采用原本C的读入方式,或者当采用输入流时将C++的同步处理给关掉,可以明显提高读入速度#include<bits/stdc++.h>#include<iostream>using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0);...原创 2019-02-19 01:06:05 · 120 阅读 · 0 评论 -
投硬币
公式实现:ans=(ans+((a[n]*POW(p,i,MOD))*POW((1-p+MOD),n-i,MOD))*POW(a[i]*a[n-i],MOD-2,MOD)a[i]为阶乘;#include<algorithm>#include<cstdio>#include<cmath>#include<iostream>#inclu...转载 2019-05-15 17:48:46 · 954 阅读 · 0 评论 -
简单计数
题解:由于任意两点都是相通的且经过k天后回到1点,因此k-2天时有可能在1点或者不在,由此可以列出关系式,f(a,1),f(a,0),求解f(a,0),因此需要构造矩阵(如上图所示),通过矩阵乘法求解f(a,0)自然想到矩阵快速幂,但当a为奇数时,余下一个乘法计算,所以算到f(a,1)后乘n-1,即为所求。#include "bits/stdc++.h"using namespace ...转载 2019-05-15 14:10:44 · 220 阅读 · 0 评论 -
快速幂&快速乘&矩阵快速幂
ll quickPower(ll a,ll b){ ll ans=1,base=a; while(b>0){ if(b&1) ans*=base; base*=base; b>>=1; } return ans;}转载 2019-02-23 16:59:24 · 82 阅读 · 0 评论 -
E - River Hopscotch
https://vjudge.net/contest/256497#problem/G/***********最大化最短距离,怕少不怕多************/#include <iostream>#include <cstring>#include <cstdlib>#include <cctype>#include ...原创 2019-04-16 18:53:14 · 112 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<cmath>#include<vector>#include<queue>#include<...原创 2019-03-29 09:28:07 · 258 阅读 · 0 评论 -
SPFA
int Dis[MAXN];bool inq[MAXN];int showup[MAXN];int Spfa(int s,int t){ queue<int>Q; for(int i=1;i<=N;i++) Dis[i]=(i==s)?0:INF; Q.push(s),inq[s]=1,showup[s]++; int v,p,m,s...原创 2019-03-28 17:00:23 · 99 阅读 · 0 评论 -
最小生成树
包含连通图上所有节点的各边权值总和最小的树将所有点边按权值大小从小到大排列,每次都从中选取最小权值的边(u,v),并把它添加到正在生长的森林中。森林中的树不断的合并,直到将所有点同属于一棵树为止。(贪心 + 并查集)1.概述图的生成树是它的一颗含有其所有顶点的无环连通子图,一幅加权图的最小生成树(MST)是它的一颗权值(树中的所有边的权值之和)最小的生成树.2.原理1.图的一种切分...原创 2019-02-14 16:20:00 · 167 阅读 · 0 评论 -
离散化
离散化是什么:一些数字,他们的范围很大(0-1e9),但是个数不算多(1-1e5),并且这些数本身的数字大小不重要,重要的是这些数字之间的相对大小(比如说某个数字是这些数字中的第几小,而与这个数字本身大小没有关系,要的是相对大小)(6 8 9 4 离散化后即为 2 3 4 1)离散化思想:因为数字太大,导致没有办法开那么大的数组,又因为数字个数并不多,这时候就可以对它们进行离散化,离散化是改...转载 2019-03-30 15:44:30 · 118 阅读 · 0 评论 -
背包问题
背包问题可以说是最经典的动态规划问题了。在这里,我们只讲解最基本的三种背包问题。零一背包问题:有n种重量和价值分别为Wi和Vi的物品。从这些物品中挑选出总重量不超过w的物品,每种物品都只能挑选一件,求所有挑选方案中价值总和的最大值。完全背包问题:有n种重量和价值分别为Wi和Vi的物品。从这些物品中挑选出总重量不超过w的物品,每种物品都可以挑选多件,求所有挑选方案中价值总和的最大值。部分背...原创 2019-02-14 16:33:04 · 194 阅读 · 0 评论