HDU 2586 How far away ?【LCA】

題目鏈接:

http://acm.hdu.edu.cn/showproblem.php?pid=2586

題意:

無向圖,給定邊及邊權重,任意兩點之間都有一條唯一的道路,道路上每個點只能出現一次。給定詢問,求詢問的結點之間的距離。

分析:

路上每個點只能出現一次~可以轉化成有根樹,問題也即為求最近公共祖先問題~~
這里每條邊加上了距離,求出lca后,用u、v的距離根的距離和減去2倍的根到最近公共祖先的距離即可~

代碼:

#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define mem(a, b) memset(a, b, sizeof(a))
#define fuck cout<<"fuck"<<endl;
const int maxn = 40005, maxq = 205;
typedef pair<int, int>p;
vector<p>G[maxn];
#define fi first
#define se second
int pa[maxn];
bool vis[maxn];
bool in[maxn];
int ance[maxn];
int dist[maxn];
int n, tot;
int head[maxn];
int ans[maxn];
struct Query{int to, next, index;};
Query query[maxq * 2];
void add_query(int u, int v, int index)
{query[tot].to = v;query[tot].index = index;query[tot].next = head[u];head[u] = tot++;query[tot].to = u;query[tot].index = index;query[tot].next = head[v];head[v] = tot++;
}
int _find(int x)
{if(pa[x] != x) return pa[x] = _find(pa[x]);return x;
}
void unite(int x, int y)
{int rx = _find(x), ry = _find(y);if(rx == ry) return;pa[rx] = ry;
}
void init()
{tot = 0;for(int i = 1; i <= n; i++){G[i].clear();pa[i] = i;}mem(ance, 0);mem(vis, false);mem(head, -1);mem(dist, 0);mem(in, false);mem(ans, 0);
}
void LCA(int u)
{ance[u] = u;vis[u] = true;for(int i = 0; i < G[u].size(); i++){int v = G[u][i].fi;if(vis[v]) continue;dist[v] = dist[u] + G[u][i].se;LCA(v);unite(u, v);ance[_find(u)] = u;}for(int i = head[u]; i != -1; i = query[i].next){int v = query[i].to;if(vis[v])  ans[query[i].index] = dist[u] + dist[v] - 2 * dist[ance[_find(u)]];}
}
int main(void)
{int u, v, k;int a, b, c;int Q;int T;scanf("%d", &T);while(T--){init();scanf("%d%d", &n, &Q);for(int i = 0; i < n - 1; i++){scanf("%d%d%d",&a, &b, &c);G[a].push_back(p(b, c));G[b].push_back(p(a, c));}for(int i = 0; i < Q; i++){scanf("%d%d",&u,&v);add_query(u, v, i);}dist[1] = 0;LCA(1);for(int i = 0; i <Q; i++){printf("%d\n", ans[i]);}}return 0;
}

轉載于:https://www.cnblogs.com/Tuesdayzz/p/5758695.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458134.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

from:https://blog.csdn.net/xianlingmao/article/details/7919597 在求取有約束條件的優化問題時&#xff0c;拉格朗日乘子法&#xff08;Lagrange Multiplier) 和KKT條件是非常重要的兩個求取方法&#xff0c;對于等式約束的優化問題&#xff0c;可以應用拉格朗日乘子法去求…

android一些若干回調測試

1.activity&#xff1a;onAttachedToWindow在onResume后回調 2.onCreate和onResume調用間隔為29ms, onAttachedToWindow和OnResume相差11ms, viewTreeObserver:OnGloballayout和onAttachedtoWindow相差19ms 注:以上的測試時間間隔不能保證精確相同&#xff0c;但是可以從中看出…

Kinect深度圖與攝像頭RGB的標定與配準(轉載文章)

作者原文地址&#xff1a;http://blog.csdn.net/aichipmunk/article/details/9264703 自從有了Kinect&#xff0c;根據深度圖提取前景就非常方便了。因此出現了很多虛擬現實、視頻融合等應用。但是&#xff0c;Kinect自身的RGB攝像頭分辨率有限&#xff0c;清晰度也不及一些專業…

臺北到淡水版Firefox無法播放視頻

臺北到淡水版的Firefox所有的視頻都無法播放&#xff0c;禁用了各種插件也還是沒法播放&#xff0c;最后才確定是SWF的問題&#xff0c;大家有同樣問題的&#xff0c;可以下載我的放到SWF文件夾下&#xff0c;目錄結構如下圖&#xff1a; ?Firefox的SWF下載地址1 ?Firefox的S…

最詳細、最完整的相機標定講解

相機標定詳解 最近做項目要用到標定&#xff0c;因為是小白&#xff0c;很多東西都不懂&#xff0c;于是查了一堆的博客&#xff0c;但沒有一個博客能讓我完全能看明白整個過程&#xff0c;絕大多數都講的不全面&#xff0c;因此自己總結了一篇博客&#xff0c;給自己理一下思…

時間日志和缺陷日志

項目計劃總結&#xff1a; 日期&&任務 聽課 編寫程序 閱讀相關書籍 網上查找資料 日總計 周一 2 2 1 1 6 周二 2 1 3 周三 1 2 2 5 周四 2 2 1 5 周五 4 1 1 6 周六 3 1 1 4 周日 4 2 2 周總計 4 …

卷積與反卷積動圖

各種卷積與反卷積動態圖 反卷積: 詳細文字鏈接&#xff1a;https://www.zhihu.com/question/43609045/answer/132235276(該鏈接中并沒有下面的動態圖) Deconvolution大致可以分為以下幾個方面&#xff1a;&#xff08;1&#xff09;unsupervised learning&#xff0c;其實就…

ASP.NET-權限管理五張表

ASP.NET 權限管理五張表權限管理的表&#xff08;5張表&#xff09;每個表里面必有的一些信息序號名稱 字段 類型 主鍵默認值是否為空備注1 用戶ID ID INT 是 null 否用戶ID2用戶名稱UserNamevarchar(100)否null否用戶名稱3用戶密碼UserPasswordvarchar(20)否null否用…

神經網絡CNN解釋

from&#xff1a;https://blog.csdn.net/ruiyiin/article/details/77113973 這篇文章原地址為An Intuitive Explanation of Convolutional Neural Networks&#xff0c;卷積神經網絡的講解非常通俗易懂。 什么是卷積神經網絡&#xff1f;為什么它們很重要&#xff1f; 卷積神經…

線條的屬性

1.lineCap"butt“ /"round" /"square" 只能用于線段的結尾處 不能用于線段的銜接處 2.lineJoin:線條與線條相交時的形態 miter(default)/ bevel (斜接&#xff09;/round&#xff08;圓接&#xff09; 1.后繪制的圖形&#xff0c;如果與前繪制的圖形區…

pcl里面使用KdTree來搜索

from:https://blog.csdn.net/qq_25491201/article/details/51135054 下面這個教程我們將學會怎么用KdTree找一個特殊點附近的K個最近鄰&#xff0c;然后我們也將復習怎么通過一個特殊的半徑來找里面所有的近鄰。 一個k-d樹&#xff0c;或者k維的樹是一個計算機科學里面的數據…

Linux英文全稱

su&#xff1a;Swith user 切換用戶&#xff0c;切換到root用戶cat: Concatenate 串聯uname: Unix name 系統名稱df: Disk free 空余硬盤du: Disk usage 硬盤使用率chown: Change owner 改變所有者chgrp: Change group 改變用戶組ps&#xff1a;Process Status 進程狀態ta…

caffe caffe.cpp 程序入口分析

from&#xff1a;https://blog.csdn.net/u014114990/article/details/47747025 caffe.cpp 程序入口分析&#xff0c; &#xff08;1&#xff09;main()函數中&#xff0c;輸入的train&#xff0c;test&#xff0c;device_query&#xff0c;time。 通過下面兩行進入程序。 …

php文件加密

1.在線加密 網址&#xff1a;http://www.phpjm.net/encode.html 本人測試過還可以&#xff0c;就是純加密&#xff0c;沒有解密。 轉載于:https://www.cnblogs.com/wuheng1991/p/5332617.html

樹莓派3 編譯驅動

分為本地編譯和交叉編譯&#xff0c;主要是Makefile的寫法&#xff1a; 本地編譯&#xff1a; obj-m : bcm2835-i2s.o KDIR : /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) all:make -C $(KDIR) M$(PWD) modules clean:rm *.o *.ko *.mod.c modules.order Module.…

caffe common 程序分析 類中定義類

caffe中 有 common.hpp 和common.cpp // The main singleton of Caffe class and encapsulates the boost and CUDA random number // generation function, providing a unified interface. caffe的singleton 類&#xff0c; 封裝boost和cuda等操作。 提供一個統一的接口&am…

相機標定究竟在標定什么?

https://mp.weixin.qq.com/s/sWpVgwXmPvIEbObXvo1HRg

SpringMVC+Shiro權限管理

SpringMVCShiro權限管理 什么是權限呢&#xff1f;舉個簡單的例子&#xff1a; 我有一個論壇&#xff0c;注冊的用戶分為normal用戶&#xff0c;manager用戶。對論壇的帖子的操作有這些&#xff1a;添加&#xff0c;刪除&#xff0c;更新&#xff0c;查看&#xff0c;回復我們規…

Caffe源碼解析1:Blob

from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 轉載請注明出處&#xff0c;樓燚(y)航的blog&#xff0c;http://www.cnblogs.com/louyihang-loves-baiyan/ 首先看到的是Blob這個類&#xff0c;Blob是作為Caffe中數據流通的一個基本類&#xff0c;網絡…

學后感

今天上了構建之法&#xff0c;我加深了對軟件工程的了解&#xff0c;也明白了單元測試和回歸測試對軟件開發的重要性&#xff0c;然而在軟件開發的過程中&#xff0c; 一個團隊是需要一定的流程來管理開發活動&#xff0c;每個工程師在軟件生命周期所做的工作也應該有一個流程&…