| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
zojAC了 poj上怎么也过不了 求解大神们好像都用的Tarjan 就我奇葩地用在线倍增……
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=1000+10,maxh=32;
int n,q,tot,ans[maxn];
int dep[maxn],anc[maxn][maxh];
int head[maxn],p[maxn*2],next[maxn*2];
bool vis[maxn];
void dfs(int root)
{
static int stc[maxn],top;
for(int i=0;i<maxh;i++) anc[root][i]=root;
dep[root]=1;
stc[++top]=root;
while(top)
{
int x=stc[top];
if(x!=root)
{
for(int i=1;i<maxh;i++) anc[x][i]=anc[anc[x][i-1]][i-1];
}
for(int &i=head[x];i;i=next[i])
{
int y=p[i];
if(y!=anc[x][0])
{
dep[y]=dep[x]+1;
anc[y][0]=x;
stc[++top]=y;
}
}
while(top&&!head[stc[top]]) --top;
}
}
void update(int &x,int h)
{
for(int i=0;h;i++)
{
(h&1)&&(x=anc[x][i]);
h>>=1;
}
return ;
}
int LCA(int s,int t)
{
if(dep[s]>dep[t]) swap(s,t);
update(t,dep[t]-dep[s]);
if(s==t) return s;
for(int i;;)
{
for(i=0;anc[s][i]!=anc[t][i];i++);
if(i==0) return anc[s][0];
s=anc[s][i-1]; t=anc[t][i-1];
}
}
void clear()
{
n=q=tot=0;
memset(ans,0,sizeof ans);
memset(anc,0,sizeof anc); memset(dep,0,sizeof dep);
memset(head,0,sizeof head); memset(next,0,sizeof next); memset(p,0,sizeof p);
memset(vis,false,sizeof vis);
return ;
}
void get_int(int&num)
{
char c; bool f=false;
for(;c=getchar(),c<'0'||c>'9';(c=='-')&&(f=true));
for(num=c-48;c=getchar(),c>='0'&&c<='9';num=num*10+c-48);
f&&(num=-num);
return ;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1,u,cnt;i<=n;i++)
{
get_int(u);
get_int(cnt);
for(int j=1,v;j<=cnt;j++)
{
get_int(v);
p[++tot]=v; next[tot]=head[u]; head[u]=tot;
vis[v]=true;
}
}
for(int i=1;i<=n;i++)
if(!vis[i])
{
dfs(i);
break;
}
get_int(q);
for(int i=1,s,t;i<=q;i++)
{
get_int(s);
get_int(t);
++ans[LCA(s,t)];
}
for(int i=1;i<=n;i++) if(ans[i]) printf("%d:%d\n",i,ans[i]);
clear();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator