zoukankan      html  css  js  c++  java
  • tarjan LCA模板

     1 #include<cstdio>
     2 #include<iostream>
     3 #define MN 300000
     4 using namespace std;
     5 int n,m,w[MN],cnt,h[MN],q[MN];
     6 int s[MN],t[MN],fa[MN],dis[MN],a[MN];
     7 bool vis[MN];
     8 struct edge{int to,next;}e[MN*8];
     9 void ins(int *h,int u,int v){e[++cnt].to=v;e[cnt].next=h[u];h[u]=cnt;}
    10 int ff(int x)={return fa[x]?fa[x]ff(fa[x]):x;}
    11 void tarjan(int u){
    12     vis[u]=true;
    13     for(int i=h[u];i;i=e[i].next){
    14         int v=e[i].to;
    15         if(!vis[v]){
    16             dis[v]=dis[u]+1; tarjan(v); fa[v]=u;
    17         }
    18     }
    19     for(int i=q[u];i;i=e[i].next){
    20         int v=e[i].to;
    21         if(a[v]) a[v]=ff(a[v]);
    22         else a[v]=u;
    23     }
    24 }
    25 int main()
    26 {
    27     scanf("%d%d",&n,&m);
    28     for(int i=1;i<n;i++){
    29         int u,v; scanf("%d%d",&u,&v); ins(h,u,v);
    30     }
    31     for(int i=1;i<=n;i++) scanf("%d",&w[i]);
    32     for(int i=1;i<=m;i++){
    33         scanf("%d%d",&s[i],&t[i]); ins(q,s[i],i); ins(q,t[i],i);
    34     }
    35     tarjan(1);
    36 }
  • 相关阅读:
    [SDOI2009]HH的项链
    [PA2010]Riddle
    纪念品
    [Code+#4]最短路
    [JSOI2007]文本生成器
    绝世好题
    一个输入框提示列表效果
    iGOOGLE分栏
    获取图片地址然后显示在input中
    网页配色工具。
  • 原文地址:https://www.cnblogs.com/Beginner-/p/7596825.html
Copyright © 2011-2022 走看看