Noip 2017 考前
来源:互联网 发布:网络直播怎么做 编辑:程序博客网 时间:2024/05/21 08:57
- tarjan缩点
void tarjan(int u) { dfn[u]=low[u]=++Time; ins[u]=1; s[++top]=u; for (int i=head[u];i;i=e[i].next) if (!dfn[to]) { tarjan(to); low[u]=min(low[u],low[to]); } else if (ins[to]) low[u]=min(low[u],dfn[to]); if (dfn[u]==low[u]) { ++num; do { now=s[top--]; ins[now]=0; bl[now]=num; } while (u^now); } } for (int i=1;i<=n;i++) if (!dfn[i]) tarjan(i);
- LCA
void dfs(int u){ vis[u]=1; for(int i=head[u];i;i=e[i].next) if (!vis[to]) { p[to][0]=u; deep[to]=deep[u]+1; dfs(to); }}void RMQ(){ for (int j=1;(1<<j)<=n;j++) for (int i=1;i<=n;i++) if (p[i][j-1]) p[i][j]=p[p[i][j-1]][j-1];}int query(int x,int y){ if (deep[x]<deep[y]) swap(x,y); int k=0,j;while (1<<(k+1)<=deep[x]) k++; for (j=k;~j;j--) if (deep[x]-(1<<j)>=deep[y]) x=p[x][j]; if (x==y) return x; for (j=k;~j;j--) if (p[x][j]^p[y][j]) x=p[x][j],y=p[y][j]; return p[x][0];}
- 最小生成树
int find(int x) {return x==father[x]?x:father[x]=find(father[x]);}int main(){ n=read(); m=read(); for (int i=1;i<=m;i++) { int u=read(),v=read(),w=read(); a[i].x=u; a[i].y=v; a[i].z=w; } sort(a+1,a+m+1,cmp); sum=0; for (int i=1;i<=n;i++) father[i]=i; for (int i=1;i<=m;i++) { int fx=find(a[i].x),fy=find(a[i].y); if (fx==fy) continue; father[fx]=fy; sum+=a[i].z; num++; } if (num==n-1) printf("%d",sum); else printf("orz"); return 0;}
- 树状数组
void insert(int x,int w) {if (x==0) return; for (;x<=n;x+=x&-x) t[x]+=w;}int query(int x) {int sum=0; for (;x;x-=x&-x) sum+=t[x]; return sum;}
- 哈希
#define ll unsigned long longll gt(int x,int y) {return (hash[y]-hash[x-1]*mi[y-x+1]);}for (ll i=1;i<=N;i++) mi[i]=mi[i-1]*S;for (ll i=1;i<=l1;i++) hash[i]=(hash[i-1]*S+s1[i]-'A'+1);
- 线性筛
void Prime(int N){ vis[1]=1; for (int i=2;i<=N;i++) { if (!vis[i]) P[++num]=i; for (int j=1;j<=num&&i*P[j]<=N;j++) { vis[i*P[j]]=1; if (i%P[j]==0) break; } }}
- 扩展欧几里得
void exgcd(int a,int b,int &d,int &x,int &y){ if (!b) {d=a,x=1,y=0;} else {gcd(b,a%b,d,y,x); y-=x*(a/b);}}(x,y)=(x0+k*b’,y0-k*a’) a’=a/gcd(a,b)
- 快速幂
while (b) {if (b&1) ans=ans*a; b>>=1; a=a*a;}
- 堆
void in(int x){ a[++size]=x; now=size; while (now>1) { next=now>>1; if (a[next]<=a[now]) break; swap(a[next],a[now]); now=next; }}int out(){ int res=a[1]; a[1]=a[size--]; now=1; while (now*2<=size) { next=now<<1; if (next+1<=size && a[next]>a[next+1]) next++; if (a[next]>=a[now]) break; swap(a[next],a[now]); now=next; } return res;}
阅读全文
0 0
- Noip 2017 考前
- NOIP 考前模板整理
- NOIP 考前注意
- NOIP考前的心得体会
- NOIP 考前错误总结
- NOIP考前总结
- noip考前大总结
- NOIP 考前提醒
- NOIP 考前日记
- NOIP考前总结与反思
- NOIP考纲总结+NOIP考前经验谈
- 【NOIP】NOIP考纲总结+NOIP考前经验谈
- [转]NOIP考前知识大总结
- 16.1116 NOIP 考前模拟(信心题)
- 【NOIP考前题目回顾】Luogu P1000
- 【NOIP考前题目回顾】Luogu P1001
- 【NOIP考前题目回顾】Luogu P1003
- 【NOIP考前题目回顾】Luogu P1005
- C语言编程必备之静态库
- web项目总结
- 02、UIDatePicker
- Kubernetes组件简介
- MySQL的btree索引和hash索引的区别
- Noip 2017 考前
- MySql 正则过滤数据 合并表多行的指定字段
- Android Intent(意图)介绍
- ROS——rplidar A1在rviz中实时显示分析
- Mysql 读取描述错误 错误代码2
- ubuntu下中文man文档安装
- Java作业@2017.11.04-11.05
- 第十一周项目1-图基本算法库
- c#接口