传送门:http://abc070.contest.atcoder.jp/tasks/abc070_d

本题是一个图论问题——树(Tree)。

有一棵结点数目为n的无向树。第i条边连接结点aibi,权值为ci。给出q次查询,以及一个整数k(1≤k≤n),第j次查询给出两个整数xj,yj(1≤xj,yj≤n),求解结点xjyj通过结点k的最短路径长度。

树上的路径问题,可以通过DFS解决。以下代码片段计算结点间的路径长度dis

void dfs(int v)
{
vis[v] = true;
for (int i = ; i < adj[v].size(); i++) {
int u = adj[v][i].v;
int w = adj[v][i].w;
if (!vis[u]) {
dis[u] = dis[v] + w;
dfs(u);
}
}
}

结点xy通过结点k的最短路径可以分成两部分:结点kx的最短路径和结点ky的最短路径。如此,通过一个简单的DFS,求解结点ki(1≤i≤n)的路径长度dis[i]。则查询的返回值为dis[x]+dis[y]。参考程序如下:

#include <bits/stdc++.h>
using namespace std; #define MAX_N 100001 vector<pair<int, int> > adj[MAX_N];
int64_t dis[MAX_N];
bool vis[MAX_N]; void dfs(int v)
{
vis[v] = true;
for (int i = ; i < adj[v].size(); i++) {
int u = adj[v][i].first;
int w = adj[v][i].second;
if (!vis[u]) {
dis[u] = dis[v] + w;
dfs(u);
}
}
} int main(void)
{
int n, k, q;
scanf("%d", &n);
for (int i = ; i < n; i++) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
adj[a].push_back(make_pair(b, c));
adj[b].push_back(make_pair(a, c));
}
scanf("%d%d", &q, &k);
dfs(k);
while (q--) {
int x, y;
scanf("%d%d", &x, &y);
printf("%lld\n", dis[x] + dis[y]);
}
return ;
}

AtCoder ABC 070D - Transit Tree Path的更多相关文章

  1. HUSTOJ:Transit Tree Path

    问题 D: Transit Tree Path   You are given a tree with N vertices.Here, a tree is a kind of graph, and ...

  2. Atcoder Beginner Contest 070 D - Transit Tree Path

    题意:n个点,n-1条边,组成一个无向的联通图,然后给出q和k,q次询问,每次给出两个点,问这两个点之间的最短距离但必须经过k点. 思路:我当时是用优化的Dijkstra写的(当天刚学的),求出k点到 ...

  3. 2018.7中石油个人赛第4场(D-Transit Tree Path)-最短路算法

    6690: Transit Tree Path 时间限制: 1 Sec  内存限制: 128 MB提交: 472  解决: 132[提交] [状态] [讨论版] [命题人:admin] 题目描述 Yo ...

  4. Atcoder ABC 070 B、C、D

    B - Two Switches Time limit : 2sec / Memory limit : 256MB Score : 200 points Problem Statement Alice ...

  5. atcoder abc 244

    atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 ...

  6. Lintcode376-Binary Tree Path Sum-Easy

    376. Binary Tree Path Sum Given a binary tree, find all paths that sum of the nodes in the path equa ...

  7. [atcoder contest 010] F - Tree Game

    [atcoder contest 010] F - Tree Game Time limit : 2sec / Memory limit : 256MB Score : 1600 points Pro ...

  8. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  9. 【启发式搜索】Codechef March Cook-Off 2018. Maximum Tree Path

    有点像计蒜之道里的 京东的物流路径 题目描述 给定一棵 N 个节点的树,每个节点有一个正整数权值.记节点 i 的权值为 Ai.考虑节点 u 和 v 之间的一条简单路径,记 dist(u, v) 为其长 ...

随机推荐

  1. 使用Django框架实现游戏站点搭建

    完整project链接点击打开链接 上一篇中我们使用了Javascript和Html5实现了弹球游戏.而在本文中我们希望以其为基础实现游戏站点,可以实现用户的注冊登录.游戏成绩记录,排名显示.微博分享 ...

  2. iOS刷新某个cell时候crash

    //一个section刷新     NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2];     [tableview reloadSec ...

  3. 最小割板子题——[USACO5.4]奶牛的电信

    今天邱神给我们讲了图论,还讲了一下网络流算法.自己找了一个洛谷板子题. 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果 ...

  4. Fisher 线性判别

    Multiplying both sides of this result by wT and adding w0, and making use of y(x)=wTx+w0 and  y(xΓ)= ...

  5. the user must supply a jdbc connection 错误解决方法

    转自:https://blog.csdn.net/actionzh/article/details/54200451 今天在配置hibernate之后,进行添加数据测试时,运行中报出了 the use ...

  6. .sh文件 编写格式

    http://blog.sina.com.cn/s/blog_54f82cc201010hfz.html 介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号# ...

  7. linux下sh语法(转载)

    介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序. 在这个例子中我们使用/bin/sh来执行程序. 当编写 ...

  8. bzoj 2599(点分治)

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBSubmit: 3642  Solved: 1081[Submit][Statu ...

  9. java Collection接口

    Collection 1——————Set子接口:无序,不允许重复. 2——————List子接口:有序,允许重复. Set和List对比: 1.set:检索元素的效率比较低,删除和插入效率比较高,删 ...

  10. HDU3533 Escape

    题目: The students of the HEU are maneuvering for their military training. The red army and the blue a ...