Vijos——T1406 拉力赛
https://vijos.org/p/1460
描述
车展结束后,游乐园决定举办一次盛大的山道拉力赛,平平和韵韵自然也要来参加大赛。
赛场上共有n个连通的计时点,n-1条赛道(构成了一棵树)。每个计时点的高度都不相同(父结点的高度必然大于子结点),相邻计时点间由赛道相连。由于马力不够,所以韵韵的遥控车只能从高处驶向低处。而且韵韵的车跑完每条赛道都需花费一定的时间。
举办方共拟举办m个赛段的比赛,每次从第u个计时点到第v个计时点,当然其中有不少比赛韵韵的遥控车是不能参加的(因为要上坡)。平平想知道他能参加多少个赛段的比赛,并且想知道他完成这些赛段的总用时。
赛道皆为单向。
格式
输入格式
第一行两个整数n,m。
接下来n-1行每行3个整数a、b、t。
表示韵韵的遥控车可以花t秒从第a个计时点到第b个计时点。
接下来m行每行2个整数u、v,意义如描述所示。
输出格式
第一行输出一个正整数,表示能参加的赛段数。
第二行输出一个正整数,表示总用时。
样例1
样例输入1
6 2
1 2 1
2 4 1
2 5 1
5 6 1
1 3 1
2 6
4 5
样例输出1
1
2
限制
各个测试点1s
提示
第一个计时点的高度是最高的;
u≠v;
对于50%的数据 n≤1000 m≤1000;
对于100%的数据 n≤10000 m≤100000;
答案小于2^64。
来源
f1zsy birdor
按标签就开始码,结果~LCA 60~
#include <algorithm>
#include <iostream>
#include <cstdio> using namespace std; #define LL long long const int N(+);
LL n,m,u,v,w; LL head[N],sumedge;
struct Edge
{
LL u,v,w,next;
Edge(LL u=,LL v=,LL next=,LL w=):
u(u),v(v),next(next),w(w){}
}edge[N];
void ins(LL u,LL v,LL w)
{
edge[++sumedge]=Edge(u,v,head[u],w);
head[u]=sumedge;
} LL dis[N],size[N],deep[N],dad[N],top[N];
void DFS(LL x)
{
size[x]=; deep[x]=deep[dad[x]]+;
for(int i=head[x];i;i=edge[i].next)
{
LL v=edge[i].v;
if(dad[x]!=v)
{
dad[v]=x;
dis[v]=dis[x]+edge[i].w,
DFS(v),size[x]+=size[v];
}
}
} void DFS_(LL x)
{
LL t=; if(!top[x]) top[x]=x;
for(int i=head[x];i;i=edge[i].next)
{
LL v=edge[i].v;
if(dad[x]!=v&&size[t]<size[v]) t=v;
}
if(t) top[t]=top[x],DFS_(t);
for(int i=head[x];i;i=edge[i].next)
{
LL v=edge[i].v;
if(dad[x]!=v&&t!=v) DFS_(v);
}
} LL LCA(LL x,LL y)
{
for(;top[x]!=top[y];x=top[dad[x]])
if(deep[top[x]]<deep[top[y]]) swap(x,y);
return deep[x]<deep[y]?x:y;
} LL ansnum,anstim; int main()
{
cin>>n>>m;
for(int i=;i<n;i++)
cin>>u>>v>>w,ins(u,v,w),ins(v,u,w);
DFS();DFS_();
for(;m;m--)
{
cin>>u>>v;
if(u==LCA(u,v))
ansnum++,anstim+=dis[v]-dis[u];
}
cout<<ansnum<<endl<<anstim;
return ;
}
AWWAWAAAWA
然后看题解,用sta记录点的先序遍历,ove记录后序遍历,
如果sta[u]<sta[v]&&ove[u]>ove[v]就说明u是v的祖先~
#include <iostream>
#include <cstdio> using namespace std; const int M(+);
int n,m,u,v,ansnum;
long long w,anstim; int head[M],sumedge;
struct Edge
{
int u,v,next,dis;
long long w;
Edge(int u=,int v=,int next=,int dis=):
u(u),v(v),next(next),dis(dis){}
}edge[M];
void ins(int u,int v,int w)
{
edge[++sumedge]=Edge(u,v,head[u],w);
head[u]=sumedge;
} int dis[M],sta[M],ove[M],tim;
void DFS(int now,int val)
{
sta[now]=++tim; dis[now]=val;
for(int i=head[now];i;i=edge[i].next)
DFS(edge[i].v,val+edge[i].dis);
ove[now]=++tim;
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
scanf("%d%d%I64d",&u,&v,&w),ins(u,v,w);
DFS(,);
for(;m;m--)
{
scanf("%d%d",&u,&v);
if(sta[u]<sta[v]&&ove[u]>ove[v])
ansnum++,anstim+=dis[v]-dis[u];
}
cout<<ansnum<<endl<<anstim;
return ;
}
Vijos——T1406 拉力赛的更多相关文章
- 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...
- vijos P1915 解方程 加强版
背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...
- vijos P1780 【NOIP2012】 开车旅行
描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...
- 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险
http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...
- 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...
- [题解]vijos & codevs 能量项链
a { text-decoration: none; font-family: "comic sans ms" } .math { color: gray; font-family ...
- [题解]vijos 运输计划
Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...
- vijos P1448 校门外的树
描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的--如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:\(K=1\),读入\(l, ...
- [vijos P1083] 小白逛公园
不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...
随机推荐
- 【JS】怎样用原生JS实现jQuery的ready方法
Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,只是与window.onload方法还是有差别的. 总的来说,window. ...
- 【数据压缩】JPEG标准与原理解析
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50392230 CSDN-勿在浮沙筑高台 为了满足不同应用的需求,JPEG标准包 ...
- nj06---包
二.创建包 1.包的概念 包是在模块基础上更深一步的抽象,Node.js的包类似于C/C++的函数库或者java的类库,它讲某个独立的功能封装起来,用于发布.更新.依赖管理的版本控制.开发了npm来解 ...
- [luogu P3360] 偷天换日 解题报告(树形DP)
题目链接:https://www.luogu.org/problemnew/show/P3360 题解: 首先我们把边上的消耗放到向下的点上,如果是叶子节点的话就先做一次0/1背包 发现这是一颗二叉树 ...
- Format operator
The argument of write has to be a string, so if we want to put other values in a file, we have to co ...
- 2013亚洲区域赛长沙站 ZOJ 3732 Graph Reconstruction
题目链接 Graph Reconstruction 题意 给你无向图每个点的度数, 问是否存在唯一解, 存在输出唯一解, 多解输出两个, 无解输出IMPOSSIBLE 思路 这里用到了 Havel-H ...
- win10安装jdk8 配置环境变量
参考:https://jingyan.baidu.com/article/6b97984dd257b41ca2b0bf86.html
- vue 学习笔记1 入门
可以在 JSFiddle上在线学习vue 注意:所演示的示例,都是在JS中将Vue实例绑定至HTML中的指定元素,然后再通过Vue实例中data内的属性或者methods中的方法,来对所绑定元素的子元 ...
- [CEOI2007]树的匹配Treasury(树形DP+高精)
题意 给一棵树,你可以匹配有边相连的两个点,问你这棵树的最大匹配时多少,并且计算出有多少种最大匹配. N≤1000,其中40%的数据答案不超过 108 题解 显然的树形DP+高精. 这题是作为考试题考 ...
- JDBC连接ORACLE无法登陆java.sql.SQLException: ORA-01017: invalid username/password; logon denied
当用jdbc连接Oracle数据库的时候 private Connection getConnection() throws SQLException { OracleDataSource ods = ...