ACM个人零散知识点整理
ACM个人零散知识点整理
杂项:
1.输入输出外挂
//读入优化 int 整数
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<= '9') {
x=x*10+ch-'0';
ch=getchar();
}
return x * f;
}
2.关闭c+++输入输出限制流
使用的时候一定放在所有cin,cout的开头,不然会导致输入的内容发生错乱
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
图论:
1.链式前向星模板
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
//init()
struct edgenode {
int w,next,to;
edgenode () {
next=w=to=0;
}
} edges[maxn];
int head[maxn];
int cnt=0;
//双向边调用两次即可
void addedge(int u, int v, int w) {
edges[cnt].to=v;
edges[cnt].w=w;
edges[cnt].next=head[u];
head[u]=cnt;
cnt++;
}
//遍历
void ask(int x) {
for(int i=head[x];i!=-1;i=edges[i].next) {
}
}
void init() {
memset(head,-1,sizeof(head));
}
int main() {
return 0;
}
2.最近公共祖先
tarjan离线
#include <bits/stdc++.h> using namespace std; const int maxn = 500001; const int maxm = 1000001; struct enode { int next,to; } edges[maxm]; struct qnode { int next,id,to;//id第几次查询 } que[maxm]; int head_e[maxn];//前向星 edges int head_q[maxn];//前向星 查询 int vis[maxn]; int f[maxn];//并查集父亲数组 int res[maxn];//结果 int cnte=0; int cntq=0; int n,m,s; inline void addedge(int u, int v) { edges[cnte].to=v; edges[cnte].next=head_e[u]; head_e[u]=cnte++; } inline void addque(int u, int v, int id) { que[cntq].to=v; que[cntq].id=id; que[cntq].next=head_q[u]; head_q[u]=cntq++; } //并查集访问父亲 int find(int x) { return x==f[x] ? x : f[x] = find(f[x]);//压缩 } void tarjan(int s) { vis[s]=1;//先标记,不能在回溯时标记,因为双向边 f[s]=s; for(int i=head_e[s]; i!=-1; i=edges[i].next) { if(!vis[edges[i].to]) { tarjan(edges[i].to); f[edges[i].to]=s; } } for(int i=head_q[s]; i!=-1; i=que[i].next) { if(vis[que[i].to]==1) { res[que[i].id]=find(que[i].to); } } } inline void init() { memset(vis,0,sizeof(vis)); memset(head_e,-1,sizeof(head_e)); memset(head_q,-1,sizeof(head_q)); for(int i=1; i<=n; ++i) f[i]=i; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>s; init(); int u,v; for(int i=1; i<n; ++i) { cin>>v>>u; addedge(v,u); addedge(u,v); } for(int i=1; i<=m; ++i) { cin>>v>>u; addque(u,v,i); addque(v,u,i); } tarjan(s); for(int i=1; i<=m; ++i) cout<<res[i]<<endl; return 0; }ST倍增在线
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> using namespace std; const int maxn = 100005; struct node { int to,next; } edges[maxn<<1]; //注意head[]数组初始化 int head[maxn],cnt,dp[maxn][15],dep[maxn]; void add(int u, int v) { edges[cnt].to=v; edges[cnt].next=head[u]; head[u]=cnt++; } //节点 父亲节点 void dfs(int s, int x) { dp[s][0]=x; dep[s]=dep[x]+1; int t; //跟新到根节点一路上的祖先 for(int i=1; (1<<i)<=dep[x]; ++i) dp[s][i]=dp[dp[s][i-1]][i-1]; for(int i=head[s]; i!=-1; i=edges[i].next) { t=edges[i].to; if(t==x) continue; dfs(t,s); } } int lca(int u, int v) { if(dep[v]>dep[u]) swap(u,v); for(int i=14; i>=0; --i) { if((dep[u]-dep[v])>=(1<<i)) { u=dp[u][i]; } } //此时深度一定相同 if(u==v) return u; for(int i=14; i>=0; --i) { if((1<<i)<=dep[u]&&dp[u][i]!=dp[v][i]) { u=dp[u][i]; v=dp[v][i]; } } //循环过程中不加判断可能会超过最近公共祖先,所以跟新到lca的儿子节点即可 return dp[u][0]; } int main() { int n,m,u,v; scanf("%d %d",&n,&m); cnt=0; memset(head,-1,sizeof(head)); for(int i=1; i<n; ++i) { scanf("%d %d",&u,&v); add(u,v); add(v,u); } dep[0]=1; dfs(1,1); for(int i=1; i<=m; ++i) { scanf("%d %d",&u,&v); printf("%d\n",lca(u,v)); } return 0; }数论:
1.快速幂(矩阵快速幂略)
int pow(int base,int num){ int ans=1; while(num!=0){ if(num&1!=0) ans*=base; base<<=1; b>>=1; } return ans; }2.位数公式
x=log(n)+1//求n有多少位3.莫比乌斯函数
在线
ll mubi(ll n) { ll mu=1; for(ll i=2;i*i<=n;++i) { if(n%i==0) { mu*=-1; ll k=0; do { k++; if(k>1) { mu=0;break; } n/=i; }while(n%i==0); } } if(n>1) mu*=-1; return mu; }离线
mu[1]=1; for(i=2;i<=n;i++) { if(!not_prime[i]) { prime[++tot]=i; mu[i]=-1; } for(j=1;prime[j]*i<=n;j++) { not_prime[prime[j]*i]=1; if(i%prime[j]==0) { mu[prime[j]*i]=0; break; } mu[prime[j]*i]=-mu[i]; } }4.最小正整数逆元(ex_gcd)
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll exgcd(ll a, ll b, ll &x, ll &y) { if(!b) { x=1;y=0;return a; } ll ans=exgcd(b,a%b,x,y); ll temp=x; x=y; y=temp-a/b*y; return ans; } int main() { ios::sync_with_stdio(false); ll m,n; cin>>m>>n; ll x,y; exgcd(m,n,x,y); cout<<((x%n)+n)%n<<endl; return 0; }
ACM个人零散知识点整理的更多相关文章
- Android 零散知识点整理
Android 零散知识点整理 为什么Android的更新试图操作必须在主线程中进行? 这是因为Android系统中的视图组件并不是线程安全的.通常应该让主线程负责创建.显示和更新UI,启动子线程,停 ...
- NDK开发-零散知识点整理
JavaVM 标准Java平台下,每一个Process可以产生很多JavaVM对象,但在Android平台上,每一个Process只能产生一个Dalvik VM对象,也就是说在Android进程中是通 ...
- vue前端面试题知识点整理
vue前端面试题知识点整理 1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...
- kafka知识点整理总结
kafka知识点整理总结 只不过是敷衍 2017-11-22 21:39:59 kafka知识点整理总结,以备不时之需. 为什么要使用消息系统: 解耦 并行 异步通信:想向队列中放入多少消息就放多少, ...
- JSP页面开发知识点整理
刚学JSP页面开发,把知识点整理一下. ----------------------------------------------------------------------- JSP语法htt ...
- JS知识点整理(二)
前言 这是对平时的一些读书笔记和理解进行整理的第二部分,第一部分请前往:JS知识点整理(一).本文包含一些易混淆.遗漏的知识点,也会配上一些例子,也许不是很完整,也许还会有点杂,但也许会有你需要的,后 ...
- Android零散知识点积累
本文仅在记录android开发中遇到的零散知识点,会不断更新... 目录 .隐藏系统标题栏 .图片尺寸及屏幕密度 3.获取顶部状态栏高度 1.隐藏系统标题栏 1)在资源文件styles.xml中定义样 ...
- css入门知识点整理
css入门知识点整理 不要嘲笑我这个蒟蒻..例子来源:w3school css其实就分为两个东西,一个是选择器,另外一个是声明.声明定义了某个对象的属性的值,这都是html的内容.重点要关注的是选择器 ...
- activity生命周期知识点整理
activity生命周期知识点整理 Activity: 是一个应用组件,用户可与其提供的屏幕进行交互.窗口通常会充满屏幕,但也可以小于屏幕并浮动在其他窗口之上. 一个activity的什么周期: 启动 ...
随机推荐
- MongoDB理解
1. 什么是MongoDB (1)MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. (2)MongoDB 是一个 ...
- LeetCode 55. Jump Game (跳跃游戏)
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 根据文字计算出label的高度
ios7.0之前用: [strtestsizeWithFont:ContentFontconstrainedToSize:CGSizeMake(ScreenWeight -20, 1000) line ...
- 将本地web服务映射到公网访问
本文始发于我的个人博客,如需转载请注明出处. 为了更好的阅读体验,可以直接进去我的个人博客看. 项目部署 之前在学习前端的时候项目都只是在本地测试,永远的都是类似 http://localhost/x ...
- 暑假练习赛 007 C - OCR
C - OCR Description standard input/outputStatements Optical Character Recognition (OCR) is one of th ...
- vue初级学习--路由router的编写(resolve的使用)
一.导语 最近在用vue仿写淘宝的商品详情页面以及加入购物车页面,若是成功了,分享给大家~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 二.正文 我先用控制台创建了vue项目demo(如 ...
- Linux上MySQL的安装
a.检测是否安装了mysql rpm -qa | grep mysql b.卸载系统自带的mysql rpm -e --nodeps 卸载的包 rpm -e --nodeps mysql-libs- ...
- vs2015添加T4模版
<#@ template language="C#" debug="false" hostspecific="true"#> & ...
- C# 自定义样式实现菜单和工具栏的分割线
在做WinForm界面布局时,菜单和工具栏必不可少!但是MenuStrip和ToolStrip不能够对边框的样式直接设置,如果想实现菜单和工具栏之间的分割线就不容易实现:今天查阅了一下msdn找到了一 ...
- C#实现DirectShow技术开发准备
DirectShow组件在“C:\WINDOWS\system32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一 ...