我只会这么多

tarjan:codevs 1332

  1. void tarjan(int u)
  2. {
  3. dfn[u]=low[u]=Time++; s.push(u);
  4. for(int i=head[u];~i;i=nxt[i])
  5. {
  6. int v=to[i];
  7. if(!dfn[v]) tarjan(v);
  8. else if(dfn[v]!=-) low[u]=Min(low[u],low[v]);
  9. }
  10. if(dfn[u]==dfn[v])
  11. {
  12. while(!s.empty())
  13. {
  14. int x=s.top(); s.pop();
  15. dfn[x]=-;
  16. tot++;
  17. if(x==u) break;
  18. }
  19. }
  20. }

spfa codevs 2038

  1. #include<iostream>
  2. #include<queue>
  3. #include<stdio.h>
  4. #include<string.h>
  5. using namespace std;
  6. const int inf=0x3f3f3f3f;
  7. int cnt=-,n,e,s,t,ans=inf,p;
  8. int head[],to[],w[],nxt[],d[],used[],pos[];
  9. int Min(int x,int y)
  10. {
  11. return x<y?x:y;
  12. }
  13. void Init()
  14. {
  15. memset(head,-,sizeof(head));
  16. memset(nxt,-,sizeof(nxt));
  17. }
  18. void link(int u,int v,int l)
  19. {
  20. nxt[++cnt]=head[u];
  21. head[u]=cnt;
  22. to[cnt]=v;
  23. w[cnt]=l;
  24. }
  25. void spfa(int s)
  26. {
  27. queue<int>q;
  28. memset(d,inf,sizeof(d));
  29. q.push(s); d[s]=; used[s]=;
  30. while(!q.empty())
  31. {
  32. int u=q.front(); q.pop(); used[u]=;
  33. for(int i=head[u];~i;i=nxt[i])
  34. {
  35. int v=to[i],val=w[i];
  36. if(d[v]>d[u]+val)
  37. {
  38. d[v]=d[u]+val;
  39. if(!used[v])
  40. {
  41. q.push(v);
  42. used[v]=;
  43. }
  44. }
  45. }
  46. }
  47. int tot=;
  48. for(int i=;i<=n;i++)
  49. {
  50. tot+=d[pos[i]];
  51. }
  52. ans=Min(ans,tot);
  53. }
  54. int main()
  55. {
  56. scanf("%d%d%d",&n,&p,&e);
  57. for(int i=;i<=n;i++)
  58. {
  59. int u; scanf("%d",&pos[i]);
  60. }
  61. Init();
  62. for(int i=;i<=e;i++)
  63. {
  64. int u,v,c; scanf("%d%d%d",&u,&v,&c);
  65. link(u,v,c); link(v,u,c);
  66. }
  67. for(int i=;i<=p;i++)
  68. {
  69. spfa(i);
  70. }
  71. printf("%d",ans);
  72. return ;
  73. }

lca 1787

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<cstring>
  4. using namespace std;
  5. int n,m,u,v,a,b,c,ans,temp1,cnt=-;
  6. int dep[],head[],to[],nxt[];
  7. int fa[][];
  8. void Init()
  9. {
  10. memset(head,-,sizeof(head));
  11. memset(nxt,-,sizeof(nxt));
  12. memset(fa,-,sizeof(fa));
  13. }
  14. int abs(int x)
  15. {
  16. return x>?x:-x;
  17. }
  18. void link(int u,int v)
  19. {
  20. nxt[++cnt]=head[u]; head[u]=cnt;
  21. to[cnt]=v;
  22. }
  23. void dfs(int u,int d)
  24. {
  25. dep[u]=d;
  26. for(int i=head[u];~i;i=nxt[i])
  27. {
  28. int v=to[i];
  29. if(!dep[v])
  30. {
  31. fa[][v]=u;
  32. dfs(v,d+);
  33. }
  34. }
  35. }
  36. int lca(int u,int v)
  37. {
  38. if(dep[u]<dep[v]) swap(u,v);
  39. int deep=dep[u]-dep[v];
  40. for(int i=;i>=;i--)
  41. {
  42. if(deep&(<<i)) u=fa[i][u];
  43. }
  44. if(u==v) return u;
  45. for(int i=;i>=;i--)
  46. {
  47. if(fa[i][u]!=fa[i][v])
  48. {
  49. u=fa[i][u];
  50. v=fa[i][v];
  51. }
  52. }
  53. return fa[][u];
  54. }
  55. inline int calc(int x,int y)
  56. {
  57. int temp=lca(x,y);
  58. return abs(dep[x]-dep[temp])+abs(dep[y]-dep[temp]);
  59. }
  60. int main()
  61. {
  62. scanf("%d%d",&n,&m);
  63. Init();
  64. for(int i=;i<n;i++)
  65. {
  66. int u,v; scanf("%d%d",&u,&v);
  67. link(u,v); link(v,u);
  68. }
  69. dfs(,);
  70. for(int i=;i<=;i++)
  71. {
  72. for(int j=;j<=n;j++)
  73. {
  74. if(fa[i-][j]!=-) fa[i][j]=fa[i-][fa[i-][j]];
  75. }
  76. }
  77. for(int i=;i<=m;i++)
  78. {
  79. scanf("%d%d%d",&a,&b,&c);
  80. int x=lca(a,b);
  81. int y=lca(b,c);
  82. int z=lca(c,a);
  83. if(x==y)
  84. temp1=z;
  85. else
  86. if(y==z)
  87. temp1=x;
  88. else
  89. if(x==z)
  90. temp1=y;
  91. ans=calc(a,temp1)+calc(b,temp1)+calc(c,temp1);
  92. printf("%d %d\n",temp1,ans);
  93. }
  94. return ;
  95. }

二分 跳石头

  1. #include<iostream>
  2. #include<stdio.h>
  3. using namespace std;
  4. int n,m,ans,L;
  5. int a[],mark[];
  6. bool C(int x)
  7. {
  8. int last=,tot=;
  9. for(int i=;i<=n;i++)
  10. {
  11. mark[i]=;
  12. if(a[i]-a[last]<x)
  13. {
  14. tot++;
  15. mark[i]=;
  16. }
  17. else last=i;
  18. }
  19. last=n+;
  20. for(int i=n;i>=;i--)
  21. {
  22. if(a[last]-a[i]<x&&!mark[i]) tot++;
  23. else if(a[last]-a[i]>=x) break;
  24. }
  25. return tot<=m;
  26. }
  27. int main()
  28. {
  29. scanf("%d%d%d",&L,&n,&m);
  30. a[]=; a[n+]=L+;
  31. for(int i=;i<=n;i++)
  32. {
  33. scanf("%d",&a[i]);
  34. }
  35. int l=,r=L+,mid;
  36. while(r-l>)
  37. {
  38. mid=(l+r)/;
  39. if(C(mid)) {l=mid;ans=mid;}
  40. else r=mid;
  41. }
  42. if(C(ans+)) ans++;
  43. printf("%d",ans);
  44. return ;
  45. }

线段树

1012

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int inf=<<;
  5. int m,d,t,size;
  6. int tree[];
  7. int Max(int x,int y)
  8. {
  9. return x>y?x:y;
  10. }
  11. void update(int l,int r,int x,int pos,int num)
  12. {
  13. if(l==r)
  14. {
  15. tree[x]=num;
  16. return;
  17. }
  18. if(pos>(l+r)/) update((l+r)/+,r,x*+,pos,num);
  19. if(pos<=(l+r)/) update(l,(l+r)/,x*,pos,num);
  20. tree[x]=Max(tree[x],Max(tree[x*],tree[x*+]));
  21. }
  22. int query(int l,int r,int x,int a,int b)
  23. {
  24. if(l>b||r<a) return -inf;
  25. if(l>=a&&r<=b) return tree[x];
  26. return Max(query(l,(l+r)/,x*,a,b),query((l+r)/+,r,x*+,a,b));
  27. }
  28. int main()
  29. {
  30. scanf("%d%d",&m,&d);
  31. for(int i=;i<=m;i++)
  32. {
  33. char s[]; scanf("%s",s);
  34. if(s[]=='A')
  35. {
  36. int n,num; scanf("%d",&n); size++;
  37. num=(n+t)%d;
  38. update(,m,,size,num);
  39. }
  40. else if(s[]=='Q')
  41. {
  42. int l; scanf("%d",&l);
  43. t=query(,m,,size-l+,size);
  44. printf("%d\n",t);
  45. }
  46. }
  47. // for(int i=1;i<=3;i++) cout<<tree[i]<<" ";
  48. return ;
  49. }

快速幂:

  1. #include<iostream>
  2. using namespace std;
  3. int n,m,k,x;
  4. int power(int k)
  5. {
  6. int t=,ret=;
  7. while(k>)
  8. {
  9. if(k%==) ret*=t;
  10. t*=t; k/=;
  11. }
  12. return ret;
  13. }
  14. int main()
  15. {
  16. cin>>k;
  17. cout<<power(k);
  18. return ;
  19. }

高精度 3116

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. string A,B;
  5. struct bigint
  6. {
  7. int d[];
  8. int len;
  9. }a,b,c;
  10. int Max(int x,int y)
  11. {
  12. return x>y?x:y;
  13. }
  14. void add(bigint&a,bigint&b,bigint&c)
  15. {
  16. int x=,temp;
  17. c.len=Max(a.len,b.len);
  18. for(int i=;i<=c.len;i++)
  19. {
  20. temp=a.d[i]+b.d[i]+x;
  21. c.d[i]=temp%; x=temp/;
  22. }
  23. if(x>) c.d[++c.len]=x;
  24. for(int i=c.len;i>=;i--) cout<<c.d[i];
  25. }
  26. int main()
  27. {
  28. cin>>A>>B;
  29. a.len=A.length();
  30. for(int i=;i<A.length();i++)
  31. {
  32. a.d[A.length()-i]=A[i]-'';
  33. }
  34. b.len=B.length();
  35. for(int i=;i<B.length();i++)
  36. {
  37. b.d[B.length()-i]=B[i]-'';
  38. }
  39. add(a,b,c);
  40. return ;
  41. }

noip复习模板的更多相关文章

  1. NOIP复习篇

    NOIP复习篇---枚举 --------------------------------------------------------------------------------------- ...

  2. django上课笔记4-复习数据库操作-复习模板-Seccion-详细cookie和session的区别

    一.复习数据库操作 字段类型 字符串 EmailField(CharField): IPAddressField(Field) URLField(CharField) SlugField(CharFi ...

  3. NOIP的模板--考前复习

    距离NOIP还有25天 可以去放弃一些巨难得题目去搞一些模板了 -------在校老师的原话 一·快排 虽然可以手打,最好用STL,里面有很多优化,会快很多 #include<iostream& ...

  4. noip级别模板小复习

    不是很noip的知识点就不写了. dij什么的太easy就不写了. 缩点 注意\(Tarjan\)在缩边双和求强联通分量时候的区别. 一个要判断是否在栈内一个不要. 最后\(topsort\)来\(d ...

  5. noip考前模板复习

    网络流 Dinic(搭配飞行员) //Serene #include<algorithm> #include<iostream> #include<cstring> ...

  6. NOIP复习之1 数学数论

    noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...

  7. 冲刺NOIP复习,算法知识点总结

    前言        离NOIP还有一个星期,匆忙的把整理的算法补充完善,看着当时的整理觉得那时还年少.第二页贴了几张从贴吧里找来的图片,看着就很热血的.当年来学这个竞赛就是为了兴趣,感受计算机之美的. ...

  8. NOIP常见模板集合

    Preface 这篇博客记录的是我联赛前虽然只有两天了的打板子记录. 只求真的能给我起到些作用吧,一般按照难度排序. 而且从这篇博客开始我会用H3的标题代替H4 为了节约篇幅,以下的代码一般均以cla ...

  9. 【NOIP复习】最短路总结

    [模板] /*堆优化Dijkstra*/ void dijkstra() { priority_queue<pair<ll,int>,vector<pair<ll,int ...

随机推荐

  1. 编辑器插件数据保存之Serializable

    Editor数据保存需求 做编辑器插件开发时,当打开一个窗口,对数值进行修改后,在关闭窗口或重新打开Unity时,希望能保存上次的数据. 相关知识 Serialization ,ScriptableO ...

  2. Unity C# 反编译

    前言 结合前篇:[反编译U3D]Decompile Unity Resources 修正 本篇说说如何查看unity项目(apk) 的源代码,前提是这个apk的代码未经过加密. 写这篇的目地就是看看别 ...

  3. Nginx负载均衡配置

    1.yum安装nginx yum install nginx 2.启动nginx chkconfig nginx on   service nginx start向web服务器中放入测试文件: < ...

  4. [No000020]背单词提不起兴趣怎么办?

  5. java 22 - 13 多线程之解决线程安全问题的实现方式2

    上一章说了,解决线程安全问题的实现方式1是使用同步代码块 同时也知道了,同步代码块的锁对象是任意对象:(Object obj ;  Demo d;)这些都行 那么,现在来说解决线程安全问题的实现方式2 ...

  6. Eclipse 代码自动提示的设置

    1. eclipse代码自动提示设置.如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)? 2. http://www.iteye.com/topic/1120919 [C++] ...

  7. js正则验证邮箱、手机号、年龄

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. .Net Core 控制台输出中文乱码

    Net Core 控制台输出中文乱码的解决方法: public static void Main(string[] args)         {             Console.Output ...

  9. 在使用EF Code First开发时,遇到的“关系”问题,以及解决方法

    Entity Framework Code First 简称 EF CF也行,就是在开发的时候,以代码先行的原则,开发人员无需考虑 数据库端的一些问题(开发过程中基本不需要在数据库管理器上操作) 言归 ...

  10. EF分页中的陷阱

    (一) 前言                                                                   EF使用非常简单,但是如果使用不当就会误入EF陷阱中. ...