POJ 1986 Distance Queries(LCA Tarjan法)
Distance Queries
【题目链接】Distance Queries
【题目类型】LCA Tarjan法
&题意:
输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面的那个字母无视掉,没用的。接着k,下面k个询问lca,输出即可
&题解:
首先看的这个 http://www.cnblogs.com/JVxie/p/4854719.html 大致懂了方法,之后又找了这个代码 http://blog.csdn.net/lianai911/article/details/42300301 就懂了一些.
【时间复杂度】\(O(n+q)\)
&代码:
#include <cstdio>
#include <bitset>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
const int maxn = 80000 + 7;
int fa[maxn], Head[maxn], QHead[maxn], Dist[maxn];
struct Edge {
int to, next, w;
} edges[maxn], Qedges[maxn];
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
bool vis[maxn];
void LCA(int u) {
fa[u] = u;
vis[u] = true;
for(int k = Head[u]; k != -1; k = edges[k].next) {
if(!vis[edges[k].to]) {
Dist[edges[k].to] = Dist[u] + edges[k].w;
LCA(edges[k].to);
fa[edges[k].to] = u;
}
}
for(int k = QHead[u]; k != -1; k = Qedges[k].next) {
if(vis[Qedges[k].to]) {
Qedges[k].w = Dist[u] + Dist[Qedges[k].to] - 2 * Dist[find(Qedges[k].to)];
}
}
}
int id, iq;
void ori() {
memset(fa, 0, sizeof(fa));
memset(vis, 0, sizeof(vis));
memset(Head, -1, sizeof(Head));
memset(QHead, -1, sizeof(QHead));
memset(edges, 0, sizeof(edges));
memset(Qedges, 0, sizeof(Qedges));
id = 0;
iq = 0;
}
void Add(int x, int y, int z, int Head[], int& id, Edge edges[]) {
edges[id].to = y;
edges[id].w = z;
edges[id].next = Head[x];
Head[x] = id++;
}
int main() {
freopen("E:1.in", "r", stdin);
int n, m, u, v, w;
char c;
while(~scanf("%d%d", &n, &m)) {
ori();
fo(i, 1, m) {
scanf("%d%d%d %c", &u, &v, &w, &c);
Add(u, v, w, Head, id, edges);
Add(v, u, w, Head, id, edges);
}
scanf("%d", &m);
fo(i, 1, m) {
scanf("%d%d", &u, &v);
Add(u, v, 0, QHead, iq, Qedges);
Add(v, u, 0, QHead, iq, Qedges);
}
LCA(1);
for(int i = 0; i < iq; i += 2)
printf("%d\n", max(Qedges[i].w, Qedges[i + 1].w));
}
return 0;
}
POJ 1986 Distance Queries(LCA Tarjan法)的更多相关文章
- POJ.1986 Distance Queries ( LCA 倍增 )
POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ...
- POJ 1986 Distance Queries LCA两点距离树
标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + d ...
- POJ 1986 Distance Queries(Tarjan离线法求LCA)
Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 12846 Accepted: 4552 ...
- poj 1986 Distance Queries LCA
题目链接:http://poj.org/problem?id=1986 Farmer John's cows refused to run in his marathon since he chose ...
- POJ 1986 - Distance Queries - [LCA模板题][Tarjan-LCA算法]
题目链接:http://poj.org/problem?id=1986 Description Farmer John's cows refused to run in his marathon si ...
- POJ 1986 Distance Queries (Tarjan算法求最近公共祖先)
题目链接 Description Farmer John's cows refused to run in his marathon since he chose a path much too lo ...
- POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)
POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...
- POJ 1986 Distance Queries 【输入YY && LCA(Tarjan离线)】
任意门:http://poj.org/problem?id=1986 Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total ...
- poj 1986 Distance Queries(LCA)
Description Farmer John's cows refused to run in his marathon since he chose a path much too long fo ...
随机推荐
- 【转载】最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录
本文介绍了一种新的语言表征模型 BERT--来自 Transformer 的双向编码器表征.与最近的语言表征模型不同,BERT 旨在基于所有层的左.右语境来预训练深度双向表征.BERT 是首个在大批句 ...
- Linux使用命令修改默认启动为图形或字符界面
因为要在Linux系统上装NVIDIA显卡驱动,默认重启必须是字符界面,因此把这块所需命令记录下来. 1,先查看当前系统默认启动的界面 systemctl get-default 2,修改默认启动界面 ...
- Swing与AWT在事件模型处理上是一致的。
Swing与AWT在事件模型处理上是一致的. Jframe实际上是一堆窗体的叠加. Swing比AWT更加复杂且灵活. 在JDK1.4中,给JFRAME添加Button不可用jf.add(b).而是使 ...
- 【LInux】统计某文件夹下目录的个数
统计当前文件夹下文件的个数,包括子文件夹里的ls -lR|grep "^-"|wc -l 统计文件夹下目录的个数,包括子文件夹里的ls -lR|grep "^d" ...
- 易混HTML Entities与正确用法
在页面上,表示HTML实体有多种方式,比方有"&+name;"."&#+10进制ID"."&#x+16进制ID".而 ...
- Jquery实现轮播公告
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Golang pprof详解
go的pprof包 go中有pprof包来做代码的性能监控,在两个地方有包: net/http/pprof runtime/pprof 其实net/http/pprof中只是使用runtime/ppr ...
- plsql中文乱码
一.关于PLSQL无法正确显示中文 刚才下载安装了PLSQL Developer 9.0.0.1601 汉化绿色版,执行SQL查询语句,发现显示的数据中只要有中文都会以?表示. 原因:客户端跟服务器的 ...
- ubuntu下nodejs和npm的安装及升级
ubuntu 下 nodejs 和 npm 的安装及升级 参考:https://segmentfault.com/a/1190000007542620 一:ubuntu下安装 node 和 npm命令 ...
- 给table加边框的样式
<style> .tb { width: 1600px; text-align: center; border-collapse: collapse; } .tb tr td { bord ...