NOIP模板

LCA

倍增

1.不要忘记dfs后调用work

2.注意枚举2^i时要包含0,注意顺序

procedure add(x,y,v:longint);
var p:point;
begin
  new(p); p^.x:=y; p^.v:=v; p^.next:=a[x]; a[x]:=p;
end;
procedure dfs(x,k:longint);
var p:point;
begin
  new(p); p:=a[x];  f[0,x]:=k; deep[x]:=deep[k]+1;
  while p<>nil do
   begin
     if p^.x<>k then
       begin s[p^.x]:=s[x]+p^.v; dfs(p^.x,x); end;p:=p^.next;
   end;
end;
procedure work;
var i,j:longint;
begin
  for i:=0 to trunc(ln(n)/ln(2))-1 do
   for j:=1 to n do
    f[i+1,j]:=f[i,f[i,j]];
end;
function lca(x,y:longint):longint;
var i,t:longint;
begin
  if deep[x]<deep[y] then begin t:=x; x:=y; y:=t; end;
  for i:=0 to trunc(ln(n)/ln(2)) do
   if ((deep[x]-deep[y])>>i) and 1=1 then x:=f[i,x];
  if x=y then exit(x);
  for i:=trunc(ln(n)/ln(2)) downto 0 do
   if f[i,x]<>f[i,y] then
    begin x:=f[i,x]; y:=f[i,y]; end;
  exit(f[0,x]);
end;   

二分图

染色

function dfs(x,c:longint):boolean;
var i,y:longint; p:point;
begin
  color[x]:=c;
  new(p);p:=w[x];
  while p<>nil do
   begin
     y:=p^.x;
     if color[y]=c then exit(false);
     if (color[y]=0)and(not dfs(y,3-c)) then exit(false);
     p:=p^.next;
   end;
  exit(true);
end;
procedure work;
var i:longint;
begin
  for i:=1 to n do color[i]:=0;
  for i:=1 to n do
   if color[i]=0 then
    if not dfs(i,1) then
     begin flag:=false; exit; end;
end;    

时间: 2024-07-30 01:48:36

NOIP模板的相关文章

扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)

题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000

纪中10日T1 2300. 【noip普及组第一题】模板题

2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 输入 输出 样例输入 样例输出 数据范围限制 朴素算法 考试开始的前一个小时我一直在折腾朴素算法 -> 对拍 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 #define IL inline 4 usin

【codevs 1200】【NOIP 2012】同余方程 拓展欧几里德求乘法逆元模板题

模板,,, #include<cstdio> using namespace std; void exgcd(long long a,long long b,long long &x,long long &y){ if (b==0) {x=1; y=0;} else {exgcd(b,a%b,x,y); int t=y; y=x-a/b*y; x=t;} } int main(){ long long a,b,x,y; scanf("%lld %lld\n"

noip考前模板大整理

//归并排序求逆序对 #include<bits/stdc++.h> #define ll long long using namespace std; int n,b[100005]; ll ans; int a[100005]; void merge_sort(int l,int r) { if(l==r)return; int mid=(l+r)>>1; int i=l,j=mid+1,cnt=l; merge_sort(l,mid); merge_sort(mid+1,r)

Noip蒟蒻专用模板

目录 模板 数论 线性晒素数 裴蜀定理 矩阵快速幂 图论 最小生成树 SPFA 数据结构 树状数组 ST表 字符串 kmp 模板 数论 线性晒素数 #include <bits/stdc++.h> using namespace std; int n,notp[20000000],pri[2000000],tot; void get(){ notp[1]=1; for(int i=2;i<=n;i++){ if(!notp[i]) pri[++tot]=i; for(int j=1;j&

noip级别模板小复习

不是很noip的知识点就不写了. dij什么的太easy就不写了. 缩点 注意\(Tarjan\)在缩边双和求强联通分量时候的区别. 一个要判断是否在栈内一个不要. 最后\(topsort\)来\(dp\),或者记忆化搜索,但是一定要记得初值为\(-1\). 考虑图不联通. 负环 考虑图不联通. 一开始\(dis=0\),判断最短路长度大于\(n\)会好一些. \(dfs\)型\(spfa\)是指数级的. ST表 注意是\(i\)到\(i+2^k-1\). 所以预处理的时候不要减1,因为已经减过

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]!=-1) low[u]=Min(low[u],low[v]); } if(dfn[u]==dfn[v]) { while(!s.empty()) { int x=s.top

【模板(们)】noip前热身练习

分块+莫队 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; /*分块*/ #include<cmath> const int N=10; int pos[N],n,blk; void fenkuai(){ scanf("%d",&n); blk=(int)(double(n)); for(int i=1;i<=n;i++)

NOIP考纲总结+NOIP考前经验谈

NOIP考纲总结+NOIP考前经验谈 首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 c.乘法(应该只会有高精乘单精) d.高精度除单精                 (后面c,d考的可能性较小,应该只考a,b) 排序算法 a.选择排序 b.插入排序 c.hash排序 d.归并排序(单纯的排序可能用不到,有快排就行了,但是归并排序的思想很重要)