noip复习模板
我只会这么多
tarjan:codevs 1332
- void tarjan(int u)
- {
- dfn[u]=low[u]=Time++; s.push(u);
- for(int i=head[u];~i;i=nxt[i])
- {
- int v=to[i];
- if(!dfn[v]) tarjan(v);
- else if(dfn[v]!=-) low[u]=Min(low[u],low[v]);
- }
- if(dfn[u]==dfn[v])
- {
- while(!s.empty())
- {
- int x=s.top(); s.pop();
- dfn[x]=-;
- tot++;
- if(x==u) break;
- }
- }
- }
spfa codevs 2038
- #include<iostream>
- #include<queue>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- const int inf=0x3f3f3f3f;
- int cnt=-,n,e,s,t,ans=inf,p;
- int head[],to[],w[],nxt[],d[],used[],pos[];
- int Min(int x,int y)
- {
- return x<y?x:y;
- }
- void Init()
- {
- memset(head,-,sizeof(head));
- memset(nxt,-,sizeof(nxt));
- }
- void link(int u,int v,int l)
- {
- nxt[++cnt]=head[u];
- head[u]=cnt;
- to[cnt]=v;
- w[cnt]=l;
- }
- void spfa(int s)
- {
- queue<int>q;
- memset(d,inf,sizeof(d));
- q.push(s); d[s]=; used[s]=;
- while(!q.empty())
- {
- int u=q.front(); q.pop(); used[u]=;
- for(int i=head[u];~i;i=nxt[i])
- {
- int v=to[i],val=w[i];
- if(d[v]>d[u]+val)
- {
- d[v]=d[u]+val;
- if(!used[v])
- {
- q.push(v);
- used[v]=;
- }
- }
- }
- }
- int tot=;
- for(int i=;i<=n;i++)
- {
- tot+=d[pos[i]];
- }
- ans=Min(ans,tot);
- }
- int main()
- {
- scanf("%d%d%d",&n,&p,&e);
- for(int i=;i<=n;i++)
- {
- int u; scanf("%d",&pos[i]);
- }
- Init();
- for(int i=;i<=e;i++)
- {
- int u,v,c; scanf("%d%d%d",&u,&v,&c);
- link(u,v,c); link(v,u,c);
- }
- for(int i=;i<=p;i++)
- {
- spfa(i);
- }
- printf("%d",ans);
- return ;
- }
lca 1787
- #include<iostream>
- #include<stdio.h>
- #include<cstring>
- using namespace std;
- int n,m,u,v,a,b,c,ans,temp1,cnt=-;
- int dep[],head[],to[],nxt[];
- int fa[][];
- void Init()
- {
- memset(head,-,sizeof(head));
- memset(nxt,-,sizeof(nxt));
- memset(fa,-,sizeof(fa));
- }
- int abs(int x)
- {
- return x>?x:-x;
- }
- void link(int u,int v)
- {
- nxt[++cnt]=head[u]; head[u]=cnt;
- to[cnt]=v;
- }
- void dfs(int u,int d)
- {
- dep[u]=d;
- for(int i=head[u];~i;i=nxt[i])
- {
- int v=to[i];
- if(!dep[v])
- {
- fa[][v]=u;
- dfs(v,d+);
- }
- }
- }
- int lca(int u,int v)
- {
- if(dep[u]<dep[v]) swap(u,v);
- int deep=dep[u]-dep[v];
- for(int i=;i>=;i--)
- {
- if(deep&(<<i)) u=fa[i][u];
- }
- if(u==v) return u;
- for(int i=;i>=;i--)
- {
- if(fa[i][u]!=fa[i][v])
- {
- u=fa[i][u];
- v=fa[i][v];
- }
- }
- return fa[][u];
- }
- inline int calc(int x,int y)
- {
- int temp=lca(x,y);
- return abs(dep[x]-dep[temp])+abs(dep[y]-dep[temp]);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- Init();
- for(int i=;i<n;i++)
- {
- int u,v; scanf("%d%d",&u,&v);
- link(u,v); link(v,u);
- }
- dfs(,);
- for(int i=;i<=;i++)
- {
- for(int j=;j<=n;j++)
- {
- if(fa[i-][j]!=-) fa[i][j]=fa[i-][fa[i-][j]];
- }
- }
- for(int i=;i<=m;i++)
- {
- scanf("%d%d%d",&a,&b,&c);
- int x=lca(a,b);
- int y=lca(b,c);
- int z=lca(c,a);
- if(x==y)
- temp1=z;
- else
- if(y==z)
- temp1=x;
- else
- if(x==z)
- temp1=y;
- ans=calc(a,temp1)+calc(b,temp1)+calc(c,temp1);
- printf("%d %d\n",temp1,ans);
- }
- return ;
- }
二分 跳石头
- #include<iostream>
- #include<stdio.h>
- using namespace std;
- int n,m,ans,L;
- int a[],mark[];
- bool C(int x)
- {
- int last=,tot=;
- for(int i=;i<=n;i++)
- {
- mark[i]=;
- if(a[i]-a[last]<x)
- {
- tot++;
- mark[i]=;
- }
- else last=i;
- }
- last=n+;
- for(int i=n;i>=;i--)
- {
- if(a[last]-a[i]<x&&!mark[i]) tot++;
- else if(a[last]-a[i]>=x) break;
- }
- return tot<=m;
- }
- int main()
- {
- scanf("%d%d%d",&L,&n,&m);
- a[]=; a[n+]=L+;
- for(int i=;i<=n;i++)
- {
- scanf("%d",&a[i]);
- }
- int l=,r=L+,mid;
- while(r-l>)
- {
- mid=(l+r)/;
- if(C(mid)) {l=mid;ans=mid;}
- else r=mid;
- }
- if(C(ans+)) ans++;
- printf("%d",ans);
- return ;
- }
线段树
1012
- #include<iostream>
- #include<cstdio>
- using namespace std;
- const int inf=<<;
- int m,d,t,size;
- int tree[];
- int Max(int x,int y)
- {
- return x>y?x:y;
- }
- void update(int l,int r,int x,int pos,int num)
- {
- if(l==r)
- {
- tree[x]=num;
- return;
- }
- if(pos>(l+r)/) update((l+r)/+,r,x*+,pos,num);
- if(pos<=(l+r)/) update(l,(l+r)/,x*,pos,num);
- tree[x]=Max(tree[x],Max(tree[x*],tree[x*+]));
- }
- int query(int l,int r,int x,int a,int b)
- {
- if(l>b||r<a) return -inf;
- if(l>=a&&r<=b) return tree[x];
- return Max(query(l,(l+r)/,x*,a,b),query((l+r)/+,r,x*+,a,b));
- }
- int main()
- {
- scanf("%d%d",&m,&d);
- for(int i=;i<=m;i++)
- {
- char s[]; scanf("%s",s);
- if(s[]=='A')
- {
- int n,num; scanf("%d",&n); size++;
- num=(n+t)%d;
- update(,m,,size,num);
- }
- else if(s[]=='Q')
- {
- int l; scanf("%d",&l);
- t=query(,m,,size-l+,size);
- printf("%d\n",t);
- }
- }
- // for(int i=1;i<=3;i++) cout<<tree[i]<<" ";
- return ;
- }
快速幂:
- #include<iostream>
- using namespace std;
- int n,m,k,x;
- int power(int k)
- {
- int t=,ret=;
- while(k>)
- {
- if(k%==) ret*=t;
- t*=t; k/=;
- }
- return ret;
- }
- int main()
- {
- cin>>k;
- cout<<power(k);
- return ;
- }
高精度 3116
- #include<iostream>
- #include<cstdio>
- using namespace std;
- string A,B;
- struct bigint
- {
- int d[];
- int len;
- }a,b,c;
- int Max(int x,int y)
- {
- return x>y?x:y;
- }
- void add(bigint&a,bigint&b,bigint&c)
- {
- int x=,temp;
- c.len=Max(a.len,b.len);
- for(int i=;i<=c.len;i++)
- {
- temp=a.d[i]+b.d[i]+x;
- c.d[i]=temp%; x=temp/;
- }
- if(x>) c.d[++c.len]=x;
- for(int i=c.len;i>=;i--) cout<<c.d[i];
- }
- int main()
- {
- cin>>A>>B;
- a.len=A.length();
- for(int i=;i<A.length();i++)
- {
- a.d[A.length()-i]=A[i]-'';
- }
- b.len=B.length();
- for(int i=;i<B.length();i++)
- {
- b.d[B.length()-i]=B[i]-'';
- }
- add(a,b,c);
- return ;
- }
noip复习模板的更多相关文章
- NOIP复习篇
NOIP复习篇---枚举 --------------------------------------------------------------------------------------- ...
- django上课笔记4-复习数据库操作-复习模板-Seccion-详细cookie和session的区别
一.复习数据库操作 字段类型 字符串 EmailField(CharField): IPAddressField(Field) URLField(CharField) SlugField(CharFi ...
- NOIP的模板--考前复习
距离NOIP还有25天 可以去放弃一些巨难得题目去搞一些模板了 -------在校老师的原话 一·快排 虽然可以手打,最好用STL,里面有很多优化,会快很多 #include<iostream& ...
- noip级别模板小复习
不是很noip的知识点就不写了. dij什么的太easy就不写了. 缩点 注意\(Tarjan\)在缩边双和求强联通分量时候的区别. 一个要判断是否在栈内一个不要. 最后\(topsort\)来\(d ...
- noip考前模板复习
网络流 Dinic(搭配飞行员) //Serene #include<algorithm> #include<iostream> #include<cstring> ...
- NOIP复习之1 数学数论
noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...
- 冲刺NOIP复习,算法知识点总结
前言 离NOIP还有一个星期,匆忙的把整理的算法补充完善,看着当时的整理觉得那时还年少.第二页贴了几张从贴吧里找来的图片,看着就很热血的.当年来学这个竞赛就是为了兴趣,感受计算机之美的. ...
- NOIP常见模板集合
Preface 这篇博客记录的是我联赛前虽然只有两天了的打板子记录. 只求真的能给我起到些作用吧,一般按照难度排序. 而且从这篇博客开始我会用H3的标题代替H4 为了节约篇幅,以下的代码一般均以cla ...
- 【NOIP复习】最短路总结
[模板] /*堆优化Dijkstra*/ void dijkstra() { priority_queue<pair<ll,int>,vector<pair<ll,int ...
随机推荐
- 编辑器插件数据保存之Serializable
Editor数据保存需求 做编辑器插件开发时,当打开一个窗口,对数值进行修改后,在关闭窗口或重新打开Unity时,希望能保存上次的数据. 相关知识 Serialization ,ScriptableO ...
- Unity C# 反编译
前言 结合前篇:[反编译U3D]Decompile Unity Resources 修正 本篇说说如何查看unity项目(apk) 的源代码,前提是这个apk的代码未经过加密. 写这篇的目地就是看看别 ...
- Nginx负载均衡配置
1.yum安装nginx yum install nginx 2.启动nginx chkconfig nginx on service nginx start向web服务器中放入测试文件: < ...
- [No000020]背单词提不起兴趣怎么办?
- java 22 - 13 多线程之解决线程安全问题的实现方式2
上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ; Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...
- Eclipse 代码自动提示的设置
1. eclipse代码自动提示设置.如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)? 2. http://www.iteye.com/topic/1120919 [C++] ...
- js正则验证邮箱、手机号、年龄
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- .Net Core 控制台输出中文乱码
Net Core 控制台输出中文乱码的解决方法: public static void Main(string[] args) { Console.Output ...
- 在使用EF Code First开发时,遇到的“关系”问题,以及解决方法
Entity Framework Code First 简称 EF CF也行,就是在开发的时候,以代码先行的原则,开发人员无需考虑 数据库端的一些问题(开发过程中基本不需要在数据库管理器上操作) 言归 ...
- EF分页中的陷阱
(一) 前言 EF使用非常简单,但是如果使用不当就会误入EF陷阱中. ...