11 2017 档案

摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 #define N 400 7 using namespace std; 8 int t,n,m,dis[N][N],vis[N],dx[5]={1,0,-1,0}; 9 int dy[5]={0,1,0,-1}; 10 int d_cnt,an... 阅读全文
posted @ 2017-11-30 20:28 MSPqwq 阅读(152) 评论(0) 推荐(0)
摘要:参考了这个PDF 第一道网络流啊!感动 阅读全文
posted @ 2017-11-30 16:55 MSPqwq 阅读(118) 评论(0) 推荐(0)
摘要:emmmmm 让你敲个匈牙利 阅读全文
posted @ 2017-11-30 14:43 MSPqwq 阅读(133) 评论(0) 推荐(0)
摘要:#include #include #include #include #define N 250 #define M 250 #define INF 100000000 using namespace std; int head[N],cur[N],lev[N],ecnt=1,S,T,n,m; queue q; struct adj { int nxt,v,w; }e[2*M]; v... 阅读全文
posted @ 2017-11-29 20:07 MSPqwq 阅读(119) 评论(0) 推荐(0)
摘要:1 namespace Hash 2 { 3 const ll N=50000; 4 const ll H=999979; 5 struct adj 6 { 7 ll nxt,v,num,val; 8 }e[N]; 9 ll head[H],ecnt=0; 10 void init() 11 { 12 ... 阅读全文
posted @ 2017-11-29 17:49 MSPqwq 阅读(207) 评论(0) 推荐(0)
摘要:题目: 给你A,B,K 求最小的x满足Ax=B (mod K) 题解: 如果A,C互质请参考上一篇博客 将 Ax≡B(mod C) 看作是Ax+Cy=B方便叙述与处理. 我们将方程一直除去A,C的最大公约数进行变形,最终使得A和C互质. 将方程同除d1=gcd(A,C),得到B1=A/d1*Ax-1 阅读全文
posted @ 2017-11-29 17:25 MSPqwq 阅读(154) 评论(0) 推荐(0)
摘要:题目: 给出A,B,C 求最小的x使得Ax=B (mod C) 题解: bsgs算法的模板题 bsgs 全称:Baby-step giant-step 把这种问题的规模降低到了sqrt(n)级别 首先B的种类数不超过C种,结合鸽巢原理,所以Ax具有的周期性显然不超过C 所以一般的枚举算法可以O(C) 阅读全文
posted @ 2017-11-29 15:57 MSPqwq 阅读(189) 评论(0) 推荐(0)
摘要:题面就是让你求两个超级大整数,求GCD 题解: 题目本意应该是出题人想考考高精度取膜 但是可以通过一种神奇的Stein算法来做 由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加减法,为了说明Stein算法的正确性,首先必须注意到 阅读全文
posted @ 2017-11-28 17:21 MSPqwq 阅读(173) 评论(0) 推荐(0)
摘要:题面就是让你解同余方程组(模数不互质) 题解: 先考虑一下两个方程 x=r1 mod(m1) x=r2 mod (m2) 去掉mod x=r1+m1y1 ......1 x=r2+m2y2 ......2 1-2可以得到 m1y1-m2y2=r1-r2 形同ax+by=c形式,可以判无解或者解出一个 阅读全文
posted @ 2017-11-28 15:15 MSPqwq 阅读(147) 评论(0) 推荐(0)
摘要:题目: 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。 通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。 然后再给出一个起始日期,要求从这一天开始,算出 阅读全文
posted @ 2017-11-27 20:03 MSPqwq 阅读(132) 评论(0) 推荐(0)
摘要:题目 给出一个循环for(int i=A;i!=B;i+=C) 在mod (1<<k) 下是否可以退出循环 是,输出时间,否输出FORVEER 题解: 题意可以变换成 A+Cx=B (mod 1<<k) 去掉mod之后变成 Cx=(B-A)+(1<<K)*y 是否有整数解 令 a=C,b=(1<<K 阅读全文
posted @ 2017-11-27 17:34 MSPqwq 阅读(154) 评论(0) 推荐(0)
摘要:题目: 求ax+by=c的一组解,使得abs(x)+abs(y)尽量小,满足前面前提下abs(ax)+abs(by)尽量小 题解: exgcd之后,分别求出让x尽量小和y尽量小的解,取min即可 阅读全文
posted @ 2017-11-27 16:53 MSPqwq 阅读(126) 评论(0) 推荐(0)
摘要:各种数论的模板 阅读全文
posted @ 2017-11-26 14:27 MSPqwq 阅读(223) 评论(0) 推荐(0)
摘要:题解: 要求s+px=t+qx (mod L) 移项 (p-q)x=t-s (mod L) 等价于 (p-q)x+Ly=t-s 即ax+by=c的方程最小非负根 exGcd后乘个C 阅读全文
posted @ 2017-11-26 14:26 MSPqwq 阅读(162) 评论(0) 推荐(0)
摘要:题目: 给一个n,n的网格,点可以遮挡视线,问从0,0看能看到多少点 题解: 根据对称性,我们可以把网格按y=x为对称轴划分成两半,求一半的就可以了,可以想到的是应该每种斜率只能看到一个点 因为斜率表达式k=y/x,所以直线上的点都满足这个关系,那么显然当gcd(x,y)==1的时候这个点是直线上的 阅读全文
posted @ 2017-11-26 13:37 MSPqwq 阅读(140) 评论(0) 推荐(0)
摘要:题意: 给一个x,求最长的排列满足开头是1,结尾是x,前一个数是后一个数的因子 输出长度和这样序列的个数 题解: 把x分解质因数,质因数个数就是答案,接下来考虑怎么求个数 显然这是一个可重集合全排列问题,设有n个元素 答案就是n!/每个元素出现次数的阶乘 阅读全文
posted @ 2017-11-26 13:10 MSPqwq 阅读(124) 评论(0) 推荐(0)
摘要:原题链接 对于以u为根的子树,后代节点的dfn显然比他的dfn大,我们可以记录一下回溯到u的dfn,显然这两个dfn构成了一个连续区间,代表u及u的子树 剩下的就和树剖一样了 阅读全文
posted @ 2017-11-24 19:53 MSPqwq 阅读(151) 评论(0) 推荐(0)
摘要:原题链接 肯定是树链剖分的题啦 树剖怎么做可以看我上一篇博客 如果我们已经剖完了: 然后考虑怎么维护重链和查询 用线段树维护的时候当前区间的区间颜色个数应该等于左儿子+右儿子,但是当左儿子的右端点和右儿子的左端点颜色一样,显然区间数要减1 所以每个节点存一下左端点的右端点颜色正常维护即可 考虑查询, 阅读全文
posted @ 2017-11-24 15:05 MSPqwq 阅读(175) 评论(0) 推荐(0)
摘要:原题链接 树链剖分的模板题:在点带权树树上维护路径和,最大值和单点修改 这里给出几个定义 以任意点为根,然后记 size (u ) 为以 u 为根的子树的结点个数,令 v 为 u 所有儿子中 size 值最大的一个儿子,则 ( u , v ) 为重边, v 称为 u 的重儿子。 u 到其余儿子的边为 阅读全文
posted @ 2017-11-23 19:01 MSPqwq 阅读(221) 评论(0) 推荐(0)
摘要:题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间长度,用st表维护区间最小值和gcd即可 阅读全文
posted @ 2017-11-22 19:09 MSPqwq 阅读(290) 评论(0) 推荐(0)
摘要:题意: 求区间max-min st表模板 阅读全文
posted @ 2017-11-22 17:26 MSPqwq 阅读(172) 评论(0) 推荐(0)
摘要:题面: 给出一群牛,每个牛牛有一个坐标和val,每两对牛牛之间的w被定义为 dis(x[i],x[j])*max(val[i],val[j]) 求w的和 题解: 我们如果按val排序,对于i来说,和他构成的权值乘的是val[i]的显然是1~i-1的牛牛 设有a个牛在他前面,b个牛在他后面 公式变成v 阅读全文
posted @ 2017-11-22 16:46 MSPqwq 阅读(142) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 #define N 40010 5 using namespace std; 6 int t[N],n,x,y,sum[N]; 7 void modify(int x) 8 { 9 while (x0) 16 ret+=t[x],x-=x&-x; 17 return ret; 18 }... 阅读全文
posted @ 2017-11-22 14:57 MSPqwq 阅读(155) 评论(0) 推荐(0)
摘要:题目大意: 给坐标轴1~n的点,每个点有一个权值,从一个点走到下一个点需要1s,如果当前时间是权值的倍数就要多花1s 给出q组操作,C表示单点修改权值,A表示询问0时刻x出发到y的时间 题解:因为权值只有2,3,4,5,6,所以60是一个周期,我们维护一颗线段树,维护0到59时刻出发从l到r+1用的 阅读全文
posted @ 2017-11-21 15:50 MSPqwq 阅读(162) 评论(0) 推荐(0)
摘要:请戳此处 阅读全文
posted @ 2017-11-20 18:54 MSPqwq 阅读(144) 评论(0) 推荐(0)
摘要:题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以用线段树维护一下每个区间剩余多少位置可选 对于一个pos 如果左儿子的剩余超过当前位置,就递归进左子 阅读全文
posted @ 2017-11-20 15:53 MSPqwq 阅读(186) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 typedef long long ll; 5 #define N 100010 6 using namespace std; 7 struct node 8 { 9 ll l,r,lz,sum; 10 }t[4*N]; 11 ll read() 12 { 13 ll ret=0,neg=1;... 阅读全文
posted @ 2017-11-20 15:05 MSPqwq 阅读(153) 评论(0) 推荐(0)
摘要:给出一个n,求1-n这n个数,同n的最大公约数的和 n<=1e9 考虑枚举每个因数,对答案贡献的就是个数*大小 阅读全文
posted @ 2017-11-19 23:51 MSPqwq 阅读(115) 评论(0) 推荐(0)
摘要:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。 由于逆序排列的数量非常大,因此只需计算并输出该数 Mod 10^9 + 7的结果就可以了。 阅读全文
posted @ 2017-11-19 19:50 MSPqwq 阅读(140) 评论(0) 推荐(0)
摘要:请戳这里! 阅读全文
posted @ 2017-11-18 16:00 MSPqwq 阅读(156) 评论(0) 推荐(0)
摘要:emmmm 显然的是a串长度是s串长度的因数 我们可以暴力枚举因数然后暴力check 阅读全文
posted @ 2017-11-18 11:28 MSPqwq 阅读(222) 评论(0) 推荐(0)
摘要:KMP之所以线性,因为匹配的时候i是不往回走的 我们只用调整j的位置 假设在s中找t 用二元组(i,j)表示s串的[i-j+1,i] 与t串的[1,j]匹配 假设s[i+1]和t[j]匹配上了,就j++ 如果不匹配的话,我们就想办法调整j, 直到找到一个满足二元组条件的j并且t[j+1]=s[i] 阅读全文
posted @ 2017-11-18 11:02 MSPqwq 阅读(152) 评论(0) 推荐(0)
摘要:经典2-sat 题解: 把一对夫妻视为一个集合,按淫乱关系建边 如果有淫乱关系显然不能都坐在新娘对面 注意要给(1,1+n)连边保证必须新娘和新郎坐对桌 tarjan缩完点之后,因为tarjan的编号是拓扑的逆序,所以我们在选择坐在新娘对面的人的时候,只要保证选择w和h编号较小的即可 阅读全文
posted @ 2017-11-18 09:52 MSPqwq 阅读(121) 评论(0) 推荐(0)
摘要:把爱恨和最大距离视为限制条件,可以知道,最大距离和限制条件多少具有单调性 所以可以二分最大距离,加边+check 阅读全文
posted @ 2017-11-18 09:32 MSPqwq 阅读(124) 评论(0) 推荐(0)
摘要:关于2-SAT 问题给出的证明和思路就不再赘述 核心是对于问题给出的条件建图,然后跑tarjan缩点 (在一个强联通分量里bool值是相同的) 看集合两个元素是否在一个强联通分量来判断是否合法 利用强联通分量是拓扑序的逆序可以进行方案的选择 2-SAT 问题代码一般比较短,重点是建图 一般来说对于一 阅读全文
posted @ 2017-11-18 07:45 MSPqwq 阅读(107) 评论(0) 推荐(0)
摘要:题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中push边的方法 请注意:只向栈中push树枝边 这样每次一对父子(u,v) 如果low[v]<=dfn[ 阅读全文
posted @ 2017-11-17 16:15 MSPqwq 阅读(169) 评论(0) 推荐(0)
摘要:题意: 给个无向图,问有多少个割点,对于每个割点求删除这个点之后会产生多少新的点双联通分量 题还是很果的 怎么求割点请参考tarjan无向图 关于能产生几个新的双联通分量,对于每个节点u来说,我们判断他是否是割点,即判断是否满足他的儿子v的low[v]>dfn[u] 而这个时候割掉这个点就会让双联通 阅读全文
posted @ 2017-11-16 19:25 MSPqwq 阅读(155) 评论(0) 推荐(0)
摘要:题意: 给一个无向图,保证任意两个点之间有两条完全不相同的路径 求至少加多少边才能实现 题解: 得先学会一波tarjan无向图 桥的定义是:删除这条边之后该图不联通 一条无向边(u,v)是桥,当且仅当(u,v)为树枝边,且满足 DFN(u)<Low(v).(因为 v 想要到达 u 的父亲必须经过(u 阅读全文
posted @ 2017-11-16 17:02 MSPqwq 阅读(237) 评论(0) 推荐(0)
摘要:欢迎来到我的博客! 阅读全文
posted @ 2017-11-15 20:21 MSPqwq 阅读(451) 评论(4) 推荐(0)
摘要:题目大意: 给一个有向图,一个文件可以从某个点出发传递向他能连的边 现在有两个问题 1.至少需要多少个放文件可以让整个图都有文件 2.可以进行一个操作:给一对点(u,v)连一条u->v的有向边,问至少需要多少次操作,才能使任意一个点放的文件都能传递到整个图 题解: 先tarjan缩个点 对于1. 找 阅读全文
posted @ 2017-11-15 20:13 MSPqwq 阅读(132) 评论(0) 推荐(0)
摘要:题目用google翻译实在看不懂 其实题目意思如下 给一个有向图,求点个数大于1的强联通分量个数 阅读全文
posted @ 2017-11-15 19:14 MSPqwq 阅读(156) 评论(0) 推荐(0)
摘要:Tarjan模板题 阅读全文
posted @ 2017-11-15 18:40 MSPqwq 阅读(182) 评论(0) 推荐(0)