1036 商务旅行(lca)
来源:互联网 发布:苹果最新软件版本 编辑:程序博客网 时间:2024/06/05 20:16
题目描述 Description
某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间。
假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间。该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环。
你的任务是帮助该商人计算一下他的最短旅行时间。
输入描述 Input Description
输入文件中的第一行有一个整数N,1<=n<=30 000,为城镇的数目。下面N-1行,每行由两个整数a 和b (1<=a, b<=n; a<>b)组成,表示城镇a和城镇b有公路连接。在第N+1行为一个整数M,下面的M行,每行有该商人需要顺次经过的各城镇编号。
输出描述 Output Description
在输出文件中输出该商人旅行的最短时间。
样例输入 Sample Input
5
1 2
1 5
3 5
4 5
4
1
3
2
5
样例输出 Sample Output
7
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<map>#include<vector>#include<queue>#include<stack>#define eps 1e-8#define ll long longconst int inf = 0x3f3f3f3f;const long long mod=1e9+7;const int N=35000+20;using namespace std;vector<int>q[N];vector<int>e[N];int n,m,ans;int fa[N],sum[N],vis[N];void init(){ memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) fa[i]=i;}int find(int x){ while(x!=fa[x]) x=fa[x]; return x;}int dfs(int u,int pre,int val){ sum[u]=val; int sz=e[u].size(); for(int i=0;i<sz;i++) { int v=e[u][i]; if(v==pre) continue; dfs(v,u,val+1); fa[v]=u; } int dsz=q[u].size(); for(int i=0;i<dsz;i++) { int v=q[u][i]; if(vis[v]) { int aim=find(v); ans=ans+sum[u]+sum[v]-2*sum[aim]; } } vis[u]=1;}int main(){ int u,v; ans=0; scanf("%d",&n); init(); for(int i=1;i<n;i++) { scanf("%d%d",&u,&v); e[u].push_back(v); e[v].push_back(u); } scanf("%d",&m); u=1; for(int i=1;i<=m;i++) { scanf("%d",&v); q[u].push_back(v); q[v].push_back(u); u=v; } dfs(1,-1,0); printf("%d\n",ans);}
阅读全文
0 0
- 1036 商务旅行(lca)
- 1036 商务旅行(LCA例题)
- codevs 1036 商务旅行 (LCA)
- CODE[VS] 1036 商务旅行(LCA + BFS)
- codevs 1036 商务旅行 (lca)
- 【LCA 倍增法】【codevs 1036 商务旅行】
- 倍增LCA code[vs]1036商务旅行
- CodeVs.1036 商务旅行 ( LCA 最近公共祖先 )
- codevs 1036 商务旅行 LCA 解题报告
- Codevs_P1036 商务旅行(LCA)
- 【codevs1036】商务旅行,LCA练习
- Codevs1036 商务旅行 LCA【pascal】
- SSL1746 商务旅行(lca)
- SSL 1746 商务旅行 树上倍增LCA(模板)
- 【WikiOI】【P1036】【商务旅行】【题解】【LCA】
- 1036商务旅行
- 1036 商务旅行
- 1036 商务旅行
- 机器学习笔记-Matrix Factorization
- RHEL文件系统与存储结构
- Java-SpringDataRedis使用入门
- 关于一般处理程序接口的调用的方法
- PLSQL----异常处理
- 1036 商务旅行(lca)
- 一个springmvc的@RequestParam异常解决
- Android Monkey 压力测试 介绍
- IOS 使用ZipArchive解压文件
- 支付宝”电脑网站支付“接口对接
- android 内存泄露的8个原因
- UE4C++ 设置UMG控件的Slot
- Shell中的if结合正则表达式使用
- 内存泄漏调试(2)——VLD