随笔分类 - 模板
摘要:inline long long mx() { long long s = 0,w = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') w = -1; ch = getchar(); } while(ch >=
阅读全文
摘要:##题目传送门 模板题. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; double a[101][105],n; inline double mx() { dou
阅读全文
摘要:##题目传送门 最短路计数的板子,存个堆优化的Dijkstra. #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int n,m,head[2001],ans[200
阅读全文
摘要:##题目传送门 扫描线板子. #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<map> #include<algorithm> using namespace std; int n,tot
阅读全文
摘要:题目传送门 分层图最短路,或者说是一个DP,f[i][j]表示用了i张免费券,到了j号点的最小花费,然后跑最短路 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; in
阅读全文
摘要:题目传送门 解题思路: 树链剖分的板子,写这篇博客只是为了存个代码. AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 7 int n,m,rr,p,a[10000
阅读全文
摘要:题目传送门 解题思路: 匈牙利算法求二分图最大匹配,其过程为:当男生i要和女生j匹配时,如果j还没有匹配,那就i和j匹配;如果j先前已经和男生k匹配了,那就让k再去找别的女生匹配,如果找到了,i和j匹配,如果找不到,i只能当光棍。 AC代码: 1 #include<iostream> 2 #incl
阅读全文
摘要:题目传送门 解题思路: 首先说KMP的作用:对于两个字符串A,B(A.size() > B.size()),求B是否是A的一个字串或B在A里的位置或A里有几个B,说白了就是字符串匹配. 下面创设一个问题背景 : 有两个字符串A,B,求B在A中的位置. A : abcdcbd B: cdcb 对于上述
阅读全文
摘要:题目传送门 解题思路: 先是朴素做法,f[i][j]表示字符串A前i位和字符串B前j位的最长公共子序列, 当a[i] == b[j]时,f[i][j]=f[i-1][j-1] + 1; 如果不相等,f[i][j]=max(f[i-1[j],f[i][j-1); 时间复杂度是O(nm)的,近似O(n^
阅读全文
摘要:题目传送门 解题思路: 二维差分的板子题.题解传送门 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int n,k,cf[1004][1004],ans,a[1004][1004]; 7 8 in
阅读全文
摘要:题目传送门 解题思路: 可以转化成0-1背包来做,但暴力转化的话,时间不允许.所以就用了一个二进制划分的方法,将m个物品分成2,4,8,16,32......(2的次方)表示,可以证明这些数通过一定组合可以表示任何数.然后跑0-1背包即可. AC代码: 1 #include<iostream> 2
阅读全文
摘要:题目传送门 解题思路: 题目里有,多重背包. AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 5 using namespace std; 6 7 int n,m,tot,f[22]; 8 string l; 9 map
阅读全文
摘要:题目传送门 解题思路: 先求强联通分量,缩点,然后统计新图中有几个点出度为0,如果大于1个,则说明这不是一个连通图,答案即为0.否则入度为0的那个强连通分量的点数即为答案 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<stack>
阅读全文
摘要:题目传送门 解题思路: 好难懂的状压DP,注释在代码里 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int n,k; 7 int s[800000],cnt[80000],tot; 8 //对于
阅读全文
摘要:题目传送门 解题思路: 人生中第一道二分答案的题,小车问题那道不算. 二分枚举一个答案,验证,如果小于当前枚举答案值,就需要去掉石头,看最后如果比m大,说明答案大了,否则就是小了或正好,知道答案区间l和r长度小于0时,就是答案. AC代码: //NOIP提高2015 Day2 T1
阅读全文
摘要:题目传送门 解题思路: 分组背包,代码有注释. AC代码:
阅读全文
摘要:题目传送门 解题思路: 补一个完全背包的模板,跟01背包十分相似,唯一不同在于重量j的枚举顺序. AC代码:
阅读全文
摘要:题目传送门 题目中文翻译: Description 电话线公司(TLC)正在建立一个新的电话电缆网络。 他们正在连接几个地方编号从1到N的整数。 没有两个地方有相同的号码。 这些线路是双向的,并且总是将两个地方连接在一起,并且在每个地方线路在电话交换机中结束。 每个地方都有一个电话交换台。 从每个地
阅读全文
摘要:1 inline void tarjan(int x,int edge) { 2 int v; 3 dfn[x] = low[x] = ++tot; 4 for(int i = head[x];i != -1; i = e[i].next) { 5 v = e[i].to; 6 if(!dfn[v]) { 7 tarjan(v,i); 8 low[x] = min(low[x],low[v]);
阅读全文
摘要:1 inline void tarjan(int x) { 2 int v; 3 dfn[x] = low[x] = ++sum; 4 a.push(x); 5 _in[x] = 1; 6 for(int i = head[x];i != -1; i = e[i].next) { 7 v = e[i].to; 8 if(!dfn[v]) { 9 tarjan(v); 10 low[x] = min
阅读全文