原题链接:

https://codeforces.com/contest/1675/problem/F

题目和18946 小美的送花线路 有相似之处。小美送花,只有把最远的结点最后送达才能用时最短。

题目大意:一个树结构,x是树根,要求先访问k个点(可能重复),最后访问y。

解题思路:树结构问题并不属于第五章内容,而是被看成特殊的图结构。在树结构中,如果要访问的两个点在树根的不同分支,那么(1)必须先访问一个分支,(2)返回树根后,(3)再访问另一个分支。这样第一个分支一去一回,每条边会访问两次。而最后访问的点因为无需返回树根,所以每条边只走一次。

此题目可以把y和其他k个点等同看待,只是必须把y作为最后一个访问的结点。这样答案= 所有路径长度乘以2 - y结点的深度。因为到y之后不用再返回树根了。

在dfs过程中,检查这条边是否连接任务结点,是的话就必须有去有回,总长度+2。

图的存储方法用的是邻接表写法,可参看 19085 图的存储结构(邻接表)

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int t,n,k,v[200005],x,y,ans,d[200005];/**< v数组标记任务点,d数组记录深度,其实只需要记录y深度 */
vector<int>e[200005];
int dfs(int root,int deep,int fa)
{d[root]=deep;/**< 只是记录深度 */int knum=v[root];for(int i=0; i<e[root].size(); i++)if(e[root][i]!=fa&&dfs(e[root][i],deep+1,root))/**< 如果dfs返回值不为0,说明这条边<root,e[root][i]>必须走 */ans+=2,knum++;/**< knum记录任务结点数量,并作为函数值返回,供上层结点判定边是否要走 */return knum;
}
int main()
{ios::sync_with_stdio(0),cin.tie(0);int i,j,temp,A,B;cin>>t;while(t--){cin>>n>>k>>x>>y;ans=0;for(i=1; i<=n; i++)v[i]=d[i]=0,e[i].clear();for(i=1; i<=k; i++){cin>>temp;v[temp]=1;}v[y]=1;/**< 把y也看成是任务点,但是这个点一定是最后访问 */for(i=1; i<n; i++){cin>>A>>B;e[A].push_back(B);e[B].push_back(A);}dfs(x,0,0);cout<<ans-d[y]<<endl;/**< 走的总路径长度-y的深度 */}return 0;
}

CF 783 F. Vlad and Unfinished Business相关推荐

  1. Codeforces Round #787 (Div. 3) F. Vlad and Unfinished Business

    翻译: Vlad和Nastya住在一个由

  2. CF 1642 F. Two Arrays 随机 + sosdp

    文章目录 题意 思路 传送门 题意 给你nnn个长度为mmm的数组,每个数组都有一个价值wiw_iwi​,让你选出两个数组他们没有交集且价值和最大,如果没有输出−1-1−1. 2≤n≤1e5,1≤m≤ ...

  3. CF 1475 F . Unusual Matrix 思维

    传送门 大体题意:给定两个矩阵a和b,给定一个操作,这个操作可以将a矩阵任意一行或者任意一列取反,问能否将a变成b. 乍一看不是一个很难的题,但是想我这样思维不好的还是看不出来什么东西.让后看到了题解 ...

  4. cf 1504 F. Flip the Cards

    F. Flip the Cards 题意: 这个题你也可以看看,就是一个卡片正反两个数,n个卡片在桌子上摆好,你可以任意移动卡片的位置,也可以翻转卡片(翻转一次消耗1点),最终使得卡片的正面为升序,反 ...

  5. 2017.10.17 CF#441 F题 思考记录

    .果然没有题解做题感觉是不一样的. 这个F题可能是最像往常B题的题了(往常B题就是dp,还一般都不难) 首先这个是|,所以|的数越多,它一定是不降的 那么合法的一定是一个数到一个数往后的数所构成的所有 ...

  6. cf 1450 F The Struggling Contestant

    link 题意:给一长度为n的数组A,求以排列p满足A[pi],A[pi-1]不同,定义每一个排列的权值为abs(pi-pi-1) >1 的i的个数.输出满足条件排列的最小权值.无解输出-1 思 ...

  7. cf 1674 F. Desktop Rearrangement

    题意解释:将图标按列排布,保证每个图标的上方和左方都有图标(就像电脑图标一样),并在询问的过程中改变图标,要求出最小合法步数 模拟写法:在读入和处理中维护四个变量:cnt,cou,a,b,分别表示*的 ...

  8. Dominant Indices(CF 1009 F)

    前言 记录一下长链剖分的小技巧 题目相关 链接 题目大意 一棵nnn个节点的树,定义fi,jf_{i,j}fi,j​为与iii号点距离为jjj的节点数量,对于每个iii求出一个最小的jjj满足fi,j ...

  9. [CF 526 F] Pudding Monsters(单调栈 + 线段树)

    CF526F Pudding Monsters problem solution code problem luogu翻译 solution observation :每行每列恰好有一个棋子,所以如果 ...

最新文章

  1. SAP MM 如果存在OPEN的盘点凭证,则不能再次创建盘点凭证
  2. 如何把字符串类型转换成整型?
  3. 男人都应该懂的一张图。。 | 今日趣图
  4. RS(1)--10分钟了解什么是推荐系统
  5. 国内首家,腾讯云云开发“全家桶”来了
  6. java快速压缩文件夹_如何使用java压缩文件夹本身
  7. 【多线程】--生产者消费者模式--synchronized版本
  8. test.php变成夏总,test.php
  9. js layui跳转页面_js中实现页面跳转
  10. 推荐几款2021好用的可视化报表工具
  11. 什么是逻辑结构以及物理结构
  12. 全国企业信用信息 网站
  13. WGS84(GPS坐标) BD09坐标(百度坐标)GCJ02(国测局坐标) 的相互转换
  14. win10+VS2017+WDK环境下编译C++程序提示error LNK1104无法打开文件*.lib(mfc140ud.lib)的问题
  15. 《日语综合教程》第七册 第六課 自然と人間
  16. 职教平台粉笔科技递交港股IPO招股书:2021年1-9月营收26.3亿
  17. 服务器ibmc无法加载js文件,weUI应用之JS常用信息提示弹层的封装
  18. 淘宝卖家如何使用表单大师
  19. 有哪些博客支持google adsense广告?
  20. 中高级工程师Java开发!java队列queue实现

热门文章

  1. 完整版一元稀疏多项式计算器
  2. visio设置图片默认大小_学习PS第6课(图片大小设置)
  3. 三层架构与MVC架构
  4. MyEclipse2017破解时 ACTIVATION_KEY为null
  5. python pyqt5教程pdf_PyQt5 从零开始制作 PDF 阅读器(一)
  6. BUUCTF-WarmUp
  7. 二进制文件vscode_VS code 的使用
  8. 一图看懂:信号的时域、频域、相位 ​​​​
  9. 薅羊毛专业版第三十六次更新
  10. 更新或卸载VisualSVN时出现0x8004401e错误,或完全卸载VisualSVN