摘要:
const int B=30; struct linear_basis{ int num[B+1]; void init(){ for(int i=0;i<=B;i++) num[i]=0; } bool insert(int x){ for(int i=B;i>=0;i--){ if(x>>i&1 阅读全文
摘要:
概念 一个区间的最小值作为根节点,然后左子树就是最小值左边区间的点,右子树是最小值右边区间的点,然后也是同理,左子树的根是左边区间的最小值,右子树一致 性质 板子: int a[N],l[N],r[N],root,n; void build(){ //单调栈维护右链 stack<int> st; f 阅读全文
摘要:
https://codeforces.com/contest/2049/problem/F 本题的第一个点在于只有mex为2k的区间才能有贡献,并且不能存在>=2k的数,所以枚举k然后计算贡献即可 然后对于单个的k,相当于每个>=2^k的数分割了一段一段的区间,再考虑到每次加的值都大于1,然后就是一 阅读全文
摘要:
一.无汇源上下界可行流 有关网络流的一些自我感觉比较通透的理解?以本题为例 若一个图是满流的,此时源点指向一个点,并且容量是W,那么就说明这个点要帮助源点向外输出W的流量,若汇点指向一个点,并且容量是W,那么就说明这个点要向汇点多输出W的流量,即接收别的点W的流量 #include<bits/std 阅读全文
摘要:
证明 Problem里面的任何一个解都能转化成G里面的一个可行流,G里面的任何一个可行流,都可以转换成Problem里面的一个可行方案,这样就可以证明这两个集合的方案是一一对应,等价的 所以可行解里面的最大值即为最大可行流 例题一 飞行员配对方案 https://www.luogu.com.cn/p 阅读全文
摘要:
1. 基本概念 1.1 流网络,不考虑反向边 如果存在反向边也没事,不如有u->v和v->u两条边,那么就可以新加入一个点 p,u->v,v->p,p->u,转化为这三条边 1.2 可行流,不考虑反向边 1.2.1 两个条件:容量限制、流量守恒 容量限制:每条边流的不能超过这条边的权值 流量守恒:每 阅读全文
摘要:
鸽着了,回头再学 阅读全文
摘要:
一.差分约束 问题是给定x1,x2,……,xn,然后给定出若干限制 xi-xj<=c,然后求解/无解 xi-xj>=c可以转换成xj-xi<=-c; xi-xj=c,可以转换为xi-xj<=c,xi-xj>=c; 最暴力的想法就是一开始给所有的变量都赋值为0,然后每次都暴力循环所有的限制,如果有限制 阅读全文
摘要:
一.双连通分量,割点,割边 割点定义:对于一个连通图,如果删去这个点后,会存在两个及两个以上的连通图 割边定义:把一条边删掉后,这个图会被分割成两个部分,又称桥 双连通概念:分为点双连通分量和边双连通分量 点双连通:没有割点 边双连通:没有割边 双连通的性质: 对于点:对于任意两点u,v,都存在两条 阅读全文
摘要:
一.DFS森林和强连通分量(SCC) 强连通:u->v,v->u,那么u和v就是强连通的,即u和v互相可达 强连通分量:一个集合内的所有点都互相可达 二.tarjan算法 #include<bits/stdc++.h> #define x first #define y second #define 阅读全文