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 拉力赛的更多相关文章

  1. 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...

  2. vijos P1915 解方程 加强版

    背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...

  3. vijos P1780 【NOIP2012】 开车旅行

    描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...

  4. 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险

    http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...

  5. 【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流

    http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ ...

  6. [题解]vijos & codevs 能量项链

    a { text-decoration: none; font-family: "comic sans ms" } .math { color: gray; font-family ...

  7. [题解]vijos 运输计划

    Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...

  8. vijos P1448 校门外的树

    描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的--如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:\(K=1\),读入\(l, ...

  9. [vijos P1083] 小白逛公园

    不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...

随机推荐

  1. hdu2236

    链接:点击打开链接 题意:在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里而且要求这n个数中的最大值和最小值的差值最小 代码: #include <iostream> #inc ...

  2. Linux系统编程——进程间通信:共享内存

    概述 url=MdyPihmS_tWLwgWL5CMzaTrwDFHu6euAJJUAjKvlzbJmRw7RfhmkBWwAloo7Y65hLY-kQdHsbqWYP2wc2fk8yq"& ...

  3. hdu 5318 The Goddess Of The Moon 矩阵高速幂

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5318 The Goddess Of The Moon Time Limit: 6000/3000 MS ( ...

  4. Can not Stop-Computer in powershell 6.0

    1 PS C:\Program Files\PowerShell\6.0.0-beta.6> Stop-ComputerStop-Computer : Failed to stop the co ...

  5. 智课雅思短语---四、Exploit to the full one’s favorableconditions and avoid unfavorable ones

    智课雅思短语---四.Exploit to the full one’s favorableconditions and avoid unfavorable ones 一.总结 一句话总结:扬长避短 ...

  6. 可以通过shadowserver来查看开放的mdns(用以反射放大攻击)——中国的在 https://mdns.shadowserver.org/workstation/index.html

    Open mDNS Scanning Project 来自:https://mdns.shadowserver.org/ If you are looking at this page, then m ...

  7. Linux 部署项目经验总结

    [通用命令]  1.创建文件夹 mkdir -p xxx 2.解压包 tar -zxvf xxxx.tar.gz  3.缩文件 tar zcvf 压缩包名称.tar.gz 要压缩的文件  4.动命令  ...

  8. python描述符和属性查找

    python描述符 定义 一般说来,描述符是一种访问对象属性时候的绑定行为,如果这个对象属性定义了__get__(),__set__(), and __delete__()一种或者几种,那么就称之为描 ...

  9. PKI 信息安全三大特性

    [机密性]发送方                                            接收方明文 M                                          ...

  10. linux6 安装oracle11g

    转自:http://blog.csdn.net/nhm_lxy/article/details/37813789 安装环境:    虚拟机VMware Workstation 10.0 操作系统:   ...