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的什么周期: 启动 ...
随机推荐
- thinkphp使用phpqrcode生成带logo二维码
//二维码图片保存路径 $pathname = date("Ymd",time()); $pathname = "./Qrcode/" . $pathname; ...
- LeetCode 283. Move Zeroes (移动零)
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- js日期倒计时效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript高性能写法
看到一篇不错的博文,如果想写出比较高性能的代码,可参看这个链接http://developer.51cto.com/art/200906/131335.htm
- Hello Kiki(中国剩余定理——不互质的情况)
Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 2016年中国大学生程序设计竞赛(杭州)1006 Four Operations
Four Operations Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- cloneNode克隆节点在不同浏览器的差异
cloneNode是用于克隆节点的,如果待克隆的节点还有子节点以及自定义属性.添加的有事件,那么克隆时,可以指定是克隆节点本身,还是将其所有子节点信息也克隆进去,这是通过给cloneNode传递一个布 ...
- Display 和Visible 区别
一. web页面前台编码时经常用到display:none样式,平常使用时发现有几点特征需要注意 1.如果在样式文件或页面文件代码中直接用display:none对元素进行了隐藏,载入页面后, ...
- 使用Jquery.js框架和CSS3实现3D相册的制作
有关3D相册的制作主要包括以下几个知识点: 1.有关图片的位置摆放,也就是一个相对定位绝对定位的使用: 2.有关CSS3中transform属性的使用(transform-style: preserv ...
- TextView SpannableString 使用之实现可点击超链接效果
TextView SpannableString 使用之实现可点击超链接效果 如果看到这里说明你对 TextView 已经有了一定的了解,至少已经使用过该控件显示文字过.现在来实现一些复杂一点的效果. ...