模板 mú bǎn
链式前向星
#include<string.h>
#define MAX 10000
struct node
{
int to,nex,wei;
}edge[MAX*+];
int head[MAX+],cnt;
void add(int u,int v,int w)//添加一个单向边u->v 权为w
{
edge[cnt].to=v;
edge[cnt].wei=w;
edge[cnt].nex=head[u];
head[u]=cnt++;
}
int main()
{
memset(head,-,sizeof(head));//初始化为-1
cnt=;//初始化 0
}
tarjan
#include<stack>
#include<algorithm>
#include<string.h>
using namespace std;
stack<int>s;
int dfn[],low[],scc[];//dfn[]时间戳 low[]最浅到达的点的时间戳 scc[]属于第几个scc
int index;//时间戳
int sccnum;//强连通的序号&&数量
void tarjan(int t)
{
dfn[t]=low[t]=++index;//记录时间戳
s.push(t);//入栈
for(int i=head[t];~i;i=edge[i].nex)//遍历儿子
{
int v=edge[i].to;//v是儿子
if(!dfn[v])//如果没走过
{
tarjan(v);//向下递归
low[t]=min(low[t],low[v]);//更新为min(当前,儿子)
}
else if(!scc[v])//如果不在栈中
{
low[t]=min(low[t],dfn[v]);
}
}
if(low[t]==dfn[t])//出栈
{
sccnum++;
while(!s.empty())
{
int x=s.top();
scc[x]=sccnum;
s.pop();
if(x==t)//直到刚刚出去的和现在的一样
break;
}
}
}
int main()
{
index=;
sccnum=;
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(scc,,sizeof(scc));
//初始化
}
LCA
int dep[MAX+],vis[MAX+],fa[MAX+],f[MAX+][];
int lca(int x,int y){
if(dep[x]<dep[y])
swap(x,y);//x为较深的
for(int i=;i>=;i--)
if(dep[f[x][i]]>=dep[y])
x=f[x][i];
if(x==y)
return x;
for(int i=;i>=;i--)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][];
}
void dfs(int t,int d)
{
dep[t]=d;
for(int i=head[t];~i;i=edge[i].nex)
{
int v=edge[i].to;
if(vis[v])continue;
vis[v]=;
fa[v]=t;
dfs(v,d+);
}
}
int main()
{
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
memset(fa,,sizeof(fa));
}
GCD&LCM
//最小公倍数 = a*b / 最大公因数
int GCD(int a, int b)
{
return b == ? a : GCD(b, a%b);
}
long long int lcm(long long int a, long long int b)
{
return (a*b / GCD(a, b));
}
快速幂
#define MOD 1000000007
int ppow(int a, int b)//a^b
{
int ans = , base = a;
while (b)
{
if (b & )
{
ans *= base;
ans %= MOD;
}
base *= base;
base %= MOD;
b >>= ;
}
return ans;
}
大数加法
string add_string(string s1, string s2)
{
if (s1 == "" && s2 == "") return "";
if (s1 == "") return s2;
if (s2 == "") return s1;
string ans = s1, minn = s2;
if (s1.length() < s2.length()) {
ans = s2;
minn = s1;
}
int a = ans.length() - , b = minn.length() - ;
for (int i = b; i >= ; --i) {
ans[a--] += minn[i] - ''; // a一直在减 , 额外还要减个'0'
}
for (int i = ans.length() - ; i > ; --i) {
if (ans[i] > '') {
ans[i] -= ;//注意这个是减10
ans[i - ]++;
}
}
if (ans[] > '') {
ans[] -= ;
ans = '' + ans;
}
return ans;
}
大数阶乘
typedef long long LL;
/*
在mult函数中,形参部分:len每次调用函数都会发生改变,n表示每次要乘以的数,最终返回的是结果的长度
tip: 阶乘都是先求之前的(n-1)!来求n!
初始化Init函数很重要,不要落下
*/
int mult(int num[], int len, int n) {
LL tmp = ;
for (LL i = ; i < len; ++i) {
tmp = tmp + num[i] * n; //从最低位开始,等号左边的tmp表示当前位,右边的tmp表示进位(之前进的位)
num[i] = tmp % ; // 保存在对应的数组位置,即去掉进位后的一位数
tmp = tmp / ; // 取整用于再次循环,与n和下一个位置的乘积相加
}
while (tmp) { // 之后的进位处理
num[len++] = tmp % ;
tmp = tmp / ;
}
return len;
}
int calculating(int n,vector<int>&v)
{
const int maxn = ;
int num[maxn], len;
//initialize
len = ;
num[] = ;
//---------
for (int i = ; i <= n; ++i) {
len = mult(num, len, i);
}
for (int i = len - ; i >= ; --i)
{
//printf("%d", num[i]); // 从最高位依次输出,数据比较多采用printf输出
v.push_back(num[i]);
}
return ;
}
int main()
{
int n;
cin >> n;
vector<int>v;
calculating(n,v);
//n的阶乘,输出到v
}
并查集
int sset[ + ];
int find(int a)//x=find(a) 将x放入a的集合
{
if (sset[a] != a)
{
sset[a] = find(sset[a]);
}
return sset[a];
}
void merge(int a, int b)//合并a,b
{
sset[a] = b;
}
最长上升子序列(LIS)
int b[];
int LIS(int a[], int n) {
int len = ; b[] = a[];
for (int i = ; i < n; i++) {
b[a[i] > b[len - ] ? len++ : lower_bound(b, b + len, a[i]) - b] = a[i]; //非降换为>=和upper_bound
}
return len;
}
模板 mú bǎn的更多相关文章
- Jade模板引擎让你飞
写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...
- ABP入门系列(2)——通过模板创建MAP版本项目
一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- DDD领域驱动设计 - 设计文档模板
设计文档模板: 系统背景和定位 业务需求描述 系统用例图 关键业务流程图 领域语言整理,主要是整理领域中的各种术语的定义,名词解释 领域划分(分析出子域.核心域.支撑域) 每个子域的领域模型设计(实体 ...
随机推荐
- vue项目构建与实战
关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 由于vue相对来说比较平缓的学习过程和新颖的技术思路,使其受到了广大前后端开发者的青睐,同时其通俗易 ...
- 正则表达式去除字符串左右空格函数 调用方法是,str.Trim();
正则表达式去除字符串左右空格函数 调用方法是,str.Trim(); String.prototype.Trim = function() { return this.replace(/(^\s*)| ...
- jquery获取当前选项的属性值a
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- [leetcode-312-Burst Balloons]
Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...
- [leetcode-537-Complex Number Multiplication]
Given two strings representing two complex numbers. You need to return a string representing their m ...
- 分享几个 git 的使用场景
你真的会使用 git 吗?你能回答下面几个问题吗? 有三个commit(顺序:CommitA.CommitB.CommitC),它们相互独立,没有依赖. 在不修改B.C的前提下,修改A,怎么操作? 合 ...
- javascript闭包的妙用——实现函数的重载
最近在看John Resig 与 Bear Bibeault的<JavaScript 忍者秘籍>.这本书处处提现了js的魔法(从我这个写强类型语言的人看来).js能够点石成金,处处体现着它 ...
- mybatis和spring整合
参考文档: http://www.cnblogs.com/jyh317/p/3834142.html http://www.cnblogs.com/xdp-gacl/p/4271627.html ht ...
- 取得system32文件夹下面文件的写入权限
取得system32文件夹下面文件的写入权限 TAKEOWN /F %SystemRoot%\system32\riched32.dll ICACLS %SystemRoot%\system32\ri ...
- IT行业歧视40岁以上人群为找工作还要谎报年龄[转]
IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...