zoukankan      html  css  js  c++  java
  • 模板集合(持续更新)

    倍增求(LCA)

    int fa[N][21],dep[N];
    void dfs(int u,int f) {
    	dep[u] = dep[f]+1; 
    	fa[u][0] = f;
    	for(int i = 1;(1<<i) <= dep[u]; ++i) fa[u][i] = fa[fa[u][i-1]][i-1];
    	for(int i = head[u]; i; i = e[i].nxt) {
    		int v = e[i].v; if(v == f) continue;
    		dfs(v,u);
    	}
    }
    
    int Q_lca(int x,int y) {
    	if(dep[x] < dep[y]) swap(x,y);
    	int d = dep[x]-dep[y];
    	for(int i = 0;(1<<i) <= d; ++i) {
    		if(d&(1<<i)) x = fa[x][i];
    	}
    	if(x == y) return x;
    	for(int i = 20;i >= 0; --i) {
    		if(fa[x][i] == fa[y][i]) continue;//debug [i] -> [0]
    		x = fa[x][i]; y = fa[y][i];
    	}
    	return fa[x][0];
    }
    
  • 相关阅读:
    5.16
    4.29
    二十节 作业
    作业
    作业
    控件
    选择排序
    百钱买百鸡
    用颜色变色变换来调整图像的对比度和亮度
    图像的裁剪
  • 原文地址:https://www.cnblogs.com/mzg1805/p/11541014.html
Copyright © 2011-2022 走看看