摘要:
s向所有信仰1的人连(s,i,1),所有信仰0的人连(i,t,1),对于朋友关系,连接双向边,流量为1。跑最大流的结果即为答案。 考虑这样做的意义。最小割就是把总点集分割为两个点集S,T,使得所有\\(u\in S,v\in T,val(u,v) \\)的值最小。也就是说,在这道题中的意义就是使最少 阅读全文
摘要:
因为是异或运算,所以考虑对每一位操作。对于所有已知mark的点,mark的当前位为1则连接(s,i,inf),否则连(i,t,inf),然后其他的边按照原图连(u,v,1),(v,u,1),跑最大流求最小割。然后从s沿着有剩余流量的边dfs,把dfs到的点都与(|)上1,因为是与,所以即使操作到了已 阅读全文
摘要:
~~拆点拆魔怔了~~ 直接按照原图建就行,这里有个小技巧就是双向边的话不用按着板子建(u,v,c)(v,u,0)(v,u,c)(u,v,0),直接建(u,v,c)(v,u,c)会快十倍!800ms 80ms,建完之后跑一遍dinic,然后从s顺着有残余流量的正向边dfs打标记fr并且计数ss,从t顺 阅读全文
摘要:
就是求哪些边在最大流上满流,也就是找割边。把0作为t点,s向所有的1~n连流量为inf的边,其他的边按照流量连。跑一遍最大流,从s顺着有残余流量的正向边dfs打标记fr,从t顺着正向边有残余流量的反向边dfs打标记to,那么满足条件的边就是两端点分别有fr和to标记并且满流(这里只考虑正向边),因为 阅读全文
摘要:
网络流的题总是出各种奇怪的错啊……没写过邻接表版的dinic,然后bfs扫到t点不直接return 1就会TTTTTLE…… 题目中的操作是“去掉人”,很容易想到拆点,套路一般是(s,i')(i,t)(u',v)(v,u),然后关于输出顺序最小方案,可以枚举删点,如果删去一个点后求得最小割比原来的小 阅读全文
摘要:
因为是无向图,所以从1到2再到3等于从2到1和3。用拆点来限制流量(i,i+n,1),然后连接(s,2+n,1),(1,t,1),(3,t,1),对于原图中的边连接(x+n,y,1)(y+n,x,1),跑一遍dinic看答案是否为2即可。 阅读全文
摘要:
~~在spoj上用题号找题就已经是手动二分了吧~~ 把1作为汇点,k个要入网的向t连流量为1的边,因为最小颜色数等于最大边流量,所以对于题目所给出的边(u,v),连接(u,v,c),二分一个流量c,根据最大流是否等于k来调整上下界。 cpp include include include inclu 阅读全文
摘要:
不重叠最短路计数。 先弗洛伊德求一遍两两距离(其实spfa或者迪杰斯特拉会更快但是没必要~~懒得~~写),然后设dis为st最短距离,把满足a[s][u]+b[u][v]+a[v][t]==dis的边(u,v)连流量为1的边,表示只能走一次。注意这里a数组是弗洛伊德之后的,b是边的原长,然后跑一边最 阅读全文
摘要:
记得把牛拆掉!拆成两个点i和i'在中间连一条流量为1的边,来限制每头牛只能选一组 一般来讲是一种物品一个消费者各占一边,但是这里有两个物品,所以考虑把牛放在中间,s向所有的食物连流量为1的边,所有食物向能吃它的牛i连流量为1的边,所有饮料向t连流量为1的边,牛i'向所有他能喝的连流量为1的边,然后跑 阅读全文
摘要:
因为n很小所以从大到小枚举答案。(从小到大先排个序,因为显然胜利场次越多越容易成为strong king。然后对于每个枚举出来的ans建图。点分别表示人和比赛。s向所有人连接流量为胜利场次的边,所有比赛向t连流量为1的边来限制流量,然后对于“某一方一定要赢得比赛”,也就是当前被枚举为strong k 阅读全文
摘要:
参考:https://www.cnblogs.com/kuangbin/p/3537525.html 这篇讲的挺好的 首先分清欧拉路和欧拉环: 欧拉路:图中经过每条边一次且仅一次的路径,要求只有两个点的出入度之差为奇数,这两个点即为欧拉路的起点和终点 欧拉环:图中经过每条边一次且仅一次的环,要求全部 阅读全文
摘要:
建图:s向所有猪圈的第一个顾客连流量为这个猪圈里住的数量,然后对于之后每个来这个猪圈的顾客,由他前一个顾客向他连边权为无穷的边,然后每个顾客向t连流量为这个顾客购买上限的边。然后跑最大流 cpp include include include include include using namesp 阅读全文
摘要:
我%……&( ¥ ……,调了一下午,最后发现P赋值1e5能过,赋值1e6就会TLE致死。改了一下午加一晚上然而这是为什么??? 一种常见的建图套路,首先二分答案,注意上界要取大一点,1e9是不行的。然后问题变为判定,首先弗洛伊德求出点两两之间的最短距离。每次建图时把点拆成两个,然后s向所有的i连容量 阅读全文
摘要:
准确的说应该叫树上分组背包?~~并不知道我写的这个叫啥~~ 设计状态f[u][j]为在以点u为根的子树中有j个黑点,转移的时候另开一个数组,不能在原数组更新(因为会用到没更新时候的状态),方程式为g[j+k]=max(g[j+k],f[u][j]+f[e[i].to][k]+(k\ (m k)+(s 阅读全文
摘要:
首先化简,题目要求的是 $$ G^{\sum_{i|n}C_{n}^{i}}\%p $$ 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 $$ G^{\sum_{i|n}C_{n}^{i}\%\varphi(p)} $$ $$ G^{\sum_{i|n}C_{n}^{i}\%p 1} $ 阅读全文
摘要:
首先答案不会很大,所以枚举答案m,于是把问题转为了判定; 关于如何判定: 首先题目中虽然没说但是数据是按照初始洞穴编号排的序,所以并不用自己重新再排 假设当前答案为m,相遇时间为x,野人i和j,那么可以列出同余式; $$ x(p "i] p[j])\equiv c[j] c[i" $$ $$ x(p 阅读全文
摘要:
参考:http://blog.csdn.net/wzq_qwq/article/details/46709471 首先推组合数,设sum为每个人礼物数的和,那么答案为 $$ ( C_{n}^{sum}C_{sum}^{w[1]}c_{sum w[1]}^{w[2]}... $$ 设w[0]=n su 阅读全文
摘要:
用途:求\\( a^x \equiv b (mod\ p) 中的x \\) 一、对于p为质数的情况 此时 \\( 0 \leq x \leq p 1 \\) 设 \\( m=\left \lceil \sqrt{p} \right \rceil ,x=i m j \\)这里 的作用是避免逆元 于是可 阅读全文
摘要:
第一问快速幂板子 第二问把式子转化为\\( xy\equiv Z(mod\ P)\rightarrow xy+bP=z \\),然后扩展欧几里得 第三问BSGS板子 cpp include include include include using namespace std; long long 阅读全文
摘要:
扩展BSGS的板子 对于gcd(a,p) 1的情况 即扩展BSGS 把式子变成等式的形式: \\( a^x+yp=b \\) 设 \\( g=gcd(a,p) \\) 那么两边同时除以g就会变成: \\( \frac{a}{g} a^{x 1}+y\frac{p}{g}=\frac{b}{g} \\ 阅读全文
摘要:
题目要求的是: $$ ...a(a(a(ax+b)+b)+b)+b...=a^nx+a^{n 1}b+a^{n 2}b+...+b\equiv t(mod\ p) $$ 后面这一大坨看着不舒服,所以考虑把它化掉,这里有两种做法: 做法一:两边同乘a 1 $$ (a^{n 1}x)(a 1)+b(a^ 阅读全文
摘要:
都是BSGS的板子题 此时 \\( 0 \leq x \leq p 1 \\) 设 \\( m=\left \lceil \sqrt{p} \right \rceil ,x=i m j \\)这里 的作用是避免逆元 于是可以把式子变形成这样:\\( a^{im}\equiv ba^j(mod\ p) 阅读全文
摘要:
一道几乎是板子的LCT,但是沉迷数学很久时候突然1A了这道题还是挺开心的 cpp include include using namespace std; const int N=30005; int n,q,sum[N],v[N],s[N],top; char c[20]; struct qwe 阅读全文
摘要:
首先建立矩阵,给每个格子编号,然后在4 4的格子中把能一步走到的格子置为1,然后乘n次即可,这里要用到矩阵快速幂 cpp include include using namespace std; const int mod=1e9+7; long long n,ans; struct qwe { l 阅读全文
摘要:
…我并不知道为什么事卡特兰数,反正用dp打的表就是卡特兰数,因为是两个三角所以再乘个2 卡特兰数使用\\( h(n)=\frac{C_{2n}^{n}}{n+1} \\)因为范围比较大所以组合数部分用卢卡斯定理来求。 cpp include include include include using 阅读全文
摘要:
挺水的但是我好久没写组合数了… 用这样一个思想,在1~m列中,考虑每一列上升几格,相当于把n 1个苹果放进m个篮子里,可以为空,问有几种方案。 这个就是一个组合数学经典问题了,考虑n个苹果放进m个篮子里,不可以为空的情况,用插板法,也就是把m 1个板子插进排成一排的果子里,分成m个不为空的区间,方案 阅读全文
摘要:
…因为网页崩溃导致要重写一遍…… 首先看一道板子题:bzoj 3944 https://www.cnblogs.com/lokiii/p/8329320.html 要求在低于线性的时间内莫比乌斯函数和欧拉函数的前缀和。因为都是积性函数,所以这里以mu为例。设 \\( f(n)=\sum_{d|n}\ 阅读全文
摘要:
和bzoj 3944比较像,但是时间卡的更死 设\\( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1}^{n}\mu(i) \\),然后很显然对于mu\\( g(n)=1\\),对于\\( g(n)=n (n+1)/2 \\ 阅读全文
摘要:
首先题目中给出的代码打错了,少了个等于号,应该是 cpp G=0; for(i=1;i include using namespace std; const long long N=1000005,m=1000000,inv2=500000004,inv4=250000002,inv6=166666 阅读全文