欢迎光临
我们一直在努力

PLCT检查是什么P3302 [SDOI2013]森林(主席树+倍增或LCT维护LCA)

  1 #include<bits/stdc++.h>
  2 #define MAXN 80001
  3 using namespace std;
  4 inline int read ()
  5 
  9     while ('0'<=ch&&ch<='9') s=(s<<1)+(s<<3)+(ch^48),ch=getchar ();
 10     return s*w;
 11 }
 12 struct edge{
 13     int v,nxt;
 14 }e[MAXN<<2];
 15 struct President_Tree{
 16     int l,r,size;
 17 }tr[MAXN*500];
 18 int testcase,n,m,t,Max,len,cnt,ans;
 19 int head[MAXN],a[MAXN],root[MAXN],fa[MAXN],size[MAXN];
 20 int mi[17],f[MAXN][17],dep[MAXN];
 21 vector<int>Vec;
 22 bool used[MAXN];
 23 inline void add (int u,int v)
 24 {
 25     e[++cnt].v=v,e[cnt].nxt=head[u],head[u]=cnt;
 26 }
 27 inline int find (int x)
 28 
 32 inline void build (int &x,int l,int r)
 33 
 40 inline void update (int &x,int y,int l,int r,int pos)
 41 
 49 inline void dfs (int u,int ff,int rt)
 50 
 59 inline void merge (int x,int y)
 60 
 66 inline int LCA (int x,int y)
 67 
 79 inline int query (int x,int y,int pre1,int pre2,int l,int r,int k)
 80 
 87 int main()
 88 {
 89     mi[0]=1;for (register int i=1;i<=16;i++) mi[i]=mi[i-1]<<1;
 90     testcase=read ();
 91     n=read (),m=read (),t=read ();
 92     for (register int i=1;i<=n;i++) fa[i]=i;
 93     for (register int i=1;i<=n;i++) a[i]=read (),Vec.push_back (a[i]);
 94     sort (Vec.begin (),Vec.end ());
 95     Vec.erase (unique (Vec.begin (),Vec.end ()),Vec.end ());
 96     for (register int i=1;i<=n;i++)
 97         a[i]=lower_bound (Vec.begin (),Vec.end (),a[i])-Vec.begin ()+1;
 98     Max=Vec.size ();
 99     for (register int i=1;i<=m;i++)
100     {
101         int u=read (),v=read ();
102         add (u,v),add (v,u);
103     }
104     build (root[0],1,Max);
105     for (register int i=1;i<=n;i++)
106         if (!used[i])
107             dfs (i,0,i);
108     while (t--)
109     
120     }
121     return 0;
122 }
赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » PLCT检查是什么P3302 [SDOI2013]森林(主席树+倍增或LCT维护LCA)

登录

找回密码

注册