博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Wannafly挑战赛1 C MMSet2
阅读量:4684 次
发布时间:2019-06-09

本文共 2029 字,大约阅读时间需要 6 分钟。

题目链接:

题意:

中文不解释。

题解:

比赛的时候是用的lca+贪心。

今天学了学虚树,这题实际就是求一个虚树的直径。

1 #include
2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 #define mst(a,b) memset(a,b,sizeof(a)) 4 using namespace std; 5 typedef pair
P; 6 7 const int N=3e5+7; 8 int in[N],out[N],ti,Dep[N]; 9 namespace LCA 10 { 11 int g[N],v[N*2],nxt[N*2],ed,f[20][N*2]; 12 int idx[N],dep[N*2],vs[N*2],dfn; 13 void init(int n){ed=0,dfn=1;F(i,0,n)g[i]=0;} 14 void adg(int x,int y){v[++ed]=y,nxt[ed]=g[x],g[x]=ed;} 15 void dfs(int u=1,int fa=0,int d=0) 16 { 17 in[u]=++ti,Dep[u]=d; 18 idx[u]=dfn,vs[dfn]=u,dep[dfn++]=d; 19 for(int i=g[u];i;i=nxt[i])if(v[i]!=fa) 20 dfs(v[i],u,d+1),vs[dfn]=u,dep[dfn++]=d; 21 out[u]=ti; 22 } 23 void lca_init(int rt) 24 { 25 dfs(rt);F(i,1,dfn-1)f[0][i]=i; 26 for(int i=1;(1<
y)x^=y,y^=x,x^=y; 37 int k=31-__builtin_clz(y-x+1); 38 int a=f[k][x],b=f[k][y-(1<
G[N]; 47 void clear(int *a,int tot){F(i,1,tot)vis[a[i]]=vip[a[i]]=0,G[a[i]].clear();} 48 bool cmp(int x,int y){
return in[x]
out[q[t]])t--; 65 addedge(q[t],a[i]),q[++t]=a[i]; 66 } 67 return tot; 68 } 69 } 70 71 int n,m,x,y,num,a[N],mx[N]; 72 73 void dfs(int x,int fa,int val) 74 { 75 mx[x]=val; 76 for(auto &it:vtree::G[x]) 77 if(it.first!=fa) 78 dfs(it.first,x,val+it.second); 79 } 80 81 int main(){ 82 scanf("%d",&n); 83 F(i,2,n) 84 { 85 scanf("%d%d",&x,&y); 86 LCA::adg(x,y),LCA::adg(y,x); 87 } 88 LCA::lca_init(1),scanf("%d",&m); 89 F(i,1,m) 90 { 91 scanf("%d",&num); 92 F(j,1,num)scanf("%d",a+j); 93 num=vtree::build(a,num); 94 dfs(1,0,0); 95 int now,v=-1; 96 F(j,1,num)if(mx[a[j]]>v)now=a[j],v=mx[a[j]]; 97 dfs(now,0,0),v=-1; 98 F(j,1,num)if(vtree::vis[a[j]]) 99 {100 if(mx[a[j]]>v)v=mx[a[j]];101 }102 printf("%d\n",(v+1)/2);103 vtree::clear(a,num);104 }105 return 0;106 }
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/7725596.html

你可能感兴趣的文章
KNN算法原理以及代码实现
查看>>
解读typescript中 super关键字的用法
查看>>
指定IE7(或其他版本)如何访问?
查看>>
iframe 自动适应页面高度
查看>>
eclipse环境下基于tomcat-7.0.82构建struts2项目
查看>>
input标签附带提示文字(bootstrap里面输入框的两侧同时添加额外元素)
查看>>
VHDL硬件描述语言学习笔记---VHDL语言要素
查看>>
某种密码(搜索专练)
查看>>
【BZOJ5305】【HAOI2018】—苹果树(组合数学)
查看>>
【BZOJ3821】【UOJ#46】【清华集训2014】—玄学(线段树分治)
查看>>
【leetcode 简单】 第八十三题 反转字符串中的元音字母
查看>>
【leetcode 简单】 第一百零八题 找到所有数组中消失的数字
查看>>
引用同一解决方案的类库工程不成功
查看>>
[转]单例模式中为什么用枚举更好
查看>>
selenium 获取断言信息
查看>>
c# 模拟get请求例子,演示Session会话状态。
查看>>
[.net 面向对象程序设计深入](0) 开篇
查看>>
C 多线程学习
查看>>
#Sam有话说#一握在手,话说十年
查看>>
匹配两个空格之间的字符。。。
查看>>