题目大意:有n个点m条单向边,每条边有一个容量.现有x人要分批从1走到n,问每批最多能走多少人,分几批运完(或输出无法运完). 解题思路:一看就是网络流的题目.每批最多能走多少人,即最大流.分几批运完,除一下即可.当最大流为0时无法运完. 以下是Dinic算法的代码(为什么我那么喜欢用Dinic?因为我个人认为它好写!): C++ Code: #include<cstdio> #include<queue> #include<cstring> using namespa…
最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道luogu的同余方程练练手. 关于x的同余方程 ax ≡ 1 mod m 那么x其实就是求a关于m的乘法逆元 ax + my = 1 对于这个不定方程的全部解是 { x = x0 + m/gcd(a,m) { y = y0 - a/gcd(a,m) 我们可以用exgcd来求出其中的一组特解x0 那么什么是exgcd? 先不考虑exgcd,假设当前我们要处理的是求出 a 和 b的最大公约数,并求出 x 和 y 使得 a*x + b*y= gc…
对于2017 D1 T2 这道题 实实在在是个码力题,非常考验耐心. 其实大体的思路并不是非常难想出来,但是要注意的小细节比较多. 题目链接:https://www.luogu.org/problemnew/show/P3952 思路 对于每一个程序,先读入L和O(),并将其中的时间复杂度抠出来. 其次整行读入字符串,即所给定的程序. 判断第一个字符是F or E F i x y 需要把x y拿出来,把i压进栈 E 退栈 压进i后为了方便退栈及退栈时判断,用一个flag标记 每做完一个程序,与前…
include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], vis[maxn], ans; struct edge{ int from, to, next, len; }e[maxn<<2]; int head[maxn], cnt; void add(int u, int v, int w) { e[++cnt].from = u; e[cnt].len…