xsy 2414【CF587C】Duff in the Army
Description
【题目描述】:
最近有一场战争发生,Duff是战争里一名士兵,Malek是她的长官。
他们的国家——Andarz Gu有n个城市(编号为1到n),总共有n-1条道路,每条道路连接着不同的两个城市,保证两两城市间必定可以通过道路到达。
Andarz Gu总共有m个人,每个人分别对应着编号1到m,对于第i个人,我们可以知道他还有一个编号ci,表示这个编号为i的人住在编号为ci的城市。注意一个城市里可能有不止一个人,也可能没有人住在这个城市。
Malek喜欢下达指令,这也是她要问DuffQ(Q个问题,不是DuffQ 个问题)个问题的原因。每一个询问包含三个数u,v,a,Malek要问你的问题就是u到v最短的那条路径上前a小的人的编号分别是什么,如果路径上的人小于a个,就有多少个就输出多少个,如果一个也没有,直接输出0。
但是Duff现在十分的忙,所以她来向你寻求帮助,请你帮助她回答这q个询问。
【输入描述】:
第一行输入n,m,q(1<=n,m,q<=10^5)
接下来n-1行,一行输入两个数v和u,表示城市v和城市u之间有一条双向道路。
再接下来一行输入m个数,对于ci表示编号为i的人居住的城市。(1<=ci<=n)
再再接下来q行,每行三个数u,v,a表示一组询问(1<=v,u<=n;1<=a<=10)
【输出描述】:
对于每组询问,输出它要的答案。
【样例输入】:
5 4 5
1 3
1 2
1 4
4 5
2 1 4 3
4 5 6
1 5 2
5 5 10
2 3 3
5 3 1
【样例输出】:
1 3
2 2 3
0
3 1 2 4
1 2
#include<iostream>
#include<cstdio>
using namespace std;
struct data{
int x,y;
}t[200001];
struct node{
int p[11],cnt,fa;
}f[100001][21],ans;
int n,m,q,x,y,c,k[100001],d[100001],h[100001],fa;
void add(int a,int b,int id){
t[id].x=b;
t[id].y=h[a];
h[a]=id;
}
node ins(node a,node b){
node g;
int l=1,r=1;
g.cnt=0;
g.fa=b.fa;
while(l<=a.cnt||r<=b.cnt){
if(g.cnt==10)break;
if(l>a.cnt){
g.cnt++;
g.p[g.cnt]=b.p[r];
r++;
}else if(r>b.cnt){
g.cnt++;
g.p[g.cnt]=a.p[l];
l++;
}else if(a.p[l]<b.p[r]){
g.cnt++;
g.p[g.cnt]=a.p[l];
l++;
}else{
g.cnt++;
g.p[g.cnt]=b.p[r];
r++;
}
}
return g;
}
void dfs(int a){
for(int i=1;i<=20;i++)f[a][i]=ins(f[a][i-1],f[f[a][i-1].fa][i-1]);
for(int i=h[a];i;i=t[i].y){
if(!d[t[i].x]){
d[t[i].x]=d[a]+1;
f[t[i].x][0].fa=a;
dfs(t[i].x);
}
}
}
void lca(int a,int b){
if(d[a]>d[b]){
for(int i=20;i>=0;i--){
if(d[f[a][i].fa]>=d[b]){
ans=ins(ans,f[a][i]);
a=f[a][i].fa;
}
}
}
if(d[a]<d[b]){
for(int i=20;i>=0;i--){
if(d[f[b][i].fa]>=d[a]){
ans=ins(ans,f[b][i]);
b=f[b][i].fa;
}
}
}
for(int i=20;i>=0;i--){
if(f[b][i].fa!=f[a][i].fa){
ans=ins(ans,f[b][i]);
ans=ins(ans,f[a][i]);
b=f[b][i].fa;
a=f[a][i].fa;
}
}
if(a!=b){
ans=ins(ans,f[b][0]);
ans=ins(ans,f[a][0]);
a=f[a][0].fa;
}
ans=ins(ans,f[a][0]);
}
int main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<n;i++){
scanf("%d%d",&x,&y);
add(x,y,i*2);
add(y,x,i*2+1);
}
for(int i=1;i<=m;i++){
scanf("%d",&x);
if(f[x][0].cnt<10){
f[x][0].cnt++;
f[x][0].p[f[x][0].cnt]=i;
}
}
d[1]=1;
dfs(1);
for(int i=1;i<=q;i++){
scanf("%d%d%d",&x,&y,&c);
ans.cnt=0;
lca(x,y);
ans.cnt=min(ans.cnt,c);
printf("%d ",ans.cnt);
for(int j=1;j<=ans.cnt;j++)printf("%d ",ans.p[j]);
printf("\n");
}
}
xsy 2414【CF587C】Duff in the Army的更多相关文章
- 【CF587F】Duff is Mad AC自动机+分块
[CF587F]Duff is Mad 题意:给出n个串$s_1,s_2..s_n$,有q组询问,每次给出l,r,k,问你编号在[l,r]中的所有串在$s_k$中出现了多少次. $\sum|s_i|, ...
- 【CF587D】Duff in Mafia 二分+前缀优化建图+2-SAT
[CF587D]Duff in Mafia 题意:给你一张n个点m条边的无向图,边有颜色和边权.你要从中删去一些边,满足: 1.任意两条删掉的边没有公共的顶点.2.任意两条剩余的.颜色相同的边没有公共 ...
- xsy 2018 【NOIP2013】货车运输
[NOIP2013]货车运输 Description A 国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有q辆货车在运输货物,司机们想知道每辆车在不超 ...
- 【转】Duff's Device
在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). ...
- BSOJ 2414 -- 【JSOI2011】分特产
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- xsy 2412【BZOJ4569】【Scoi2016】萌萌哒
Description Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四个数,l1,r1,l2, ...
- 【Henu ACM Round#14 C】Duff and Weight Lifting
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 2^y可以由两个2^(y-1)相加得到. 则有一个贪心的策略. 就是2^x尽量都变成2^(x+1) (即能够凑就尽量凑) 如果x还有 ...
- 【Henu ACM Round#14 B】Duff in Love
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你在n的因子里面找一个最大的数字x 且x的因子全都不是完全平方数(y^2,y>1) O(sqrt(n))找出n的所有因子. ...
- 【LCA】CodeForce #326 Div.2 E:Duff in the Army
C. Duff in the Army Recently Duff has been a soldier in the army. Malek is her commander. Their coun ...
随机推荐
- 第10组 Alpha冲刺(1/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 史恩泽(组长) 过去两天完成了哪些任务 描述 了解了反馈机制的实现原理 确定好算法的框架 对接口的规范化进行学习 展示Gi ...
- VC++ 返回13位时间戳(Unix时间戳)
//获取13位时间戳 CString GetUnixTime() { CString nowTime; SYSTEMTIME sysTime; GetLocalTime(&sysTime); ...
- Binder 原理剖析***
一. 前言 希望更加深入理解 Binder 实现机制的,可以阅读文末的参考资料以及相关源码. 二. Binder 概述 简单介绍下什么是 Binder.Binder 是一种进程间通信机制,基于开源的 ...
- matplotlib显示黑白灰度图像颜色设置
对于黑白灰度图像(矩阵) 1. 默认使用伪彩色拉升 2 cmap参数为 binary,可能导致颜色反转 3. cmap = gray,same color as origin, that is, wh ...
- layui 提交验证以及field作用
设置值时只需data.field.name(input中name属性)=1;即可赋值data.field.index_desc = layedit.getContent(index_desc); $. ...
- flutter GridView 网格布局
当数据量很大的时候用矩阵方式排列比较清晰.此时我们可以用网格列表组件 GridView 实 现布局. GridView 创建网格列表有多种方式,常用有以下两种. 1.可以通过 GridView.cou ...
- Spring的Bean的生命周期方法执行顺序测试
通过一个简单的Maven工程来演示Spring的Bean生命周期函数的执行顺序. 下面是工程的目录结构: 直接贴代码: pom.xml文件内容: <?xml version="1.0& ...
- 查看Oracle中是否有锁表
转: 查看Oracle中是否有锁表 2018-04-23 17:59 alapha 阅读(19450) 评论(0) 编辑 收藏 一.用dba用户登录,或者将用户赋权为DBA用户 命令: su - or ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- 安卓 android studio 报错 Lint found fatal errors while assembling a release target
报错截图如下: 解决方法:在app的build.gradle中添加如下代码 android{ lintOptions { checkReleaseBuilds false abortOnError f ...