BZOJ 1832: [AHOI2008]聚会|Lca
来源:互联网 发布:自学剑道软件 编辑:程序博客网 时间:2024/05/17 05:57
求出3个点两两的lca 有两个是相同的选另一个作为聚会地点
然后算距离 树剖求Lca似乎很快的样子
#include<set>#include<map>#include<ctime>#include<queue>#include<cmath>#include<cstdio>#include<vector>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#define T 500006#define MX 1e9using namespace std;int top[T],fa[T],deep[T],size[T];int head[T],lst[2*T],nxt[2*T];int n,m,tot;int sc(){ int i=0,f=1; char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f;}void insert(int x,int y){ lst[++tot]=y; nxt[tot]=head[x]; head[x]=tot; lst[++tot]=x; nxt[tot]=head[y]; head[y]=tot;}void dfs(int x,int f){ deep[x]=deep[f]+1;size[x]=1; for(int i=head[x];i;i=nxt[i]) if(lst[i]!=f) { fa[lst[i]]=x; dfs(lst[i],x); size[x]+=size[lst[i]]; }}void _dfs(int x,int htp){ int k=0;top[x]=htp; for(int i=head[x];i;i=nxt[i]) if(lst[i]!=fa[x]&&size[lst[i]]>size[k])k=lst[i]; if(!k)return;_dfs(k,htp); for(int i=head[x];i;i=nxt[i]) if(lst[i]!=fa[x]&&lst[i]!=k) _dfs(lst[i],lst[i]);}int Lca(int x,int y){ while(top[x]!=top[y]) { if(deep[top[x]]<deep[top[y]])swap(x,y); x=fa[top[x]]; } return deep[x]>deep[y]?y:x;}int main(){ n=sc(),m=sc(); for(int i=1;i<n;i++) { int x=sc(),y=sc(); insert(x,y); } dfs(1,0); _dfs(1,1); for(int i=1;i<=m;i++) { int x=sc(),y=sc(),z=sc(),sum,t; int a=Lca(x,y),b=Lca(y,z),c=Lca(x,z); if(b==c)t=a;else if(a==c)t=b;else t=c; sum=deep[x]+deep[y]+deep[z]+3*deep[t]-2*(deep[Lca(x,t)]+deep[Lca(y,t)]+deep[Lca(z,t)]); printf("%d %d\n",t,sum); } return 0;}
0 0
- BZOJ 1832: [AHOI2008]聚会|Lca
- bzoj 1832: [AHOI2008]聚会 lca
- 【BZOJ 1832】 [AHOI2008]聚会|倍增lca
- BZOJ 1787: [Ahoi2008]Meet 紧急集合/1832: [AHOI2008]聚会 LCA
- 1832: [AHOI2008]聚会 LCA
- bzoj1832: [AHOI2008]聚会 LCA
- 【bzoj1832】 AHOI2008聚会 lca
- bzoj 1787 [Ahoi2008]Meet 紧急集合(1832 [AHOI2008]聚会)
- BZOJ P1832[AHOI2008]聚会
- 【BZOJ1832】【AHOI2008】聚会 倍增lca
- bzoj1832: [AHOI2008]聚会(倍增lca)
- BZOJ 1787 AHOI2008 紧急集合 倍增LCA
- BZOJ 1787: [Ahoi2008]Meet 紧急集合(LCA)
- bzoj 1787: [Ahoi2008]Meet 紧急集合(lca)
- [AHOI2008] BZOJ 1787 Meet紧急集合-LCA
- 【BZOJ】1787 [Ahoi2008]Meet 紧急集合 LCA
- bzoj 1787: [Ahoi2008]Meet 紧急集合 lca
- BZOJ 1787: [Ahoi2008]Meet 紧急集合【LCA】
- 高德地图_获取KEY的方法
- 使用Android获取的音乐文件数据库
- eclipse打不开闪退解决方式
- httpclient 请求http数据,json转map
- 副本集管理
- BZOJ 1832: [AHOI2008]聚会|Lca
- 基于用户投票的排名算法(五):威尔逊区间
- openerp参考文章
- 敌兵布阵
- 01-密码学扫盲
- genymotion unable to start the device的解决方案
- bzoj2820: YY的GCD
- 硬币等于骰子(在统计学意义上)
- Capture images using V4L2 on Linux