zoj 3195
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3320
离线算法RE了..
- #include<stdio.h>
- #include<iostream>
- #include<string.h>
- #include<math.h>
- #include<algorithm>
- using namespace std;
- const int N = ;
- const int M =;
- struct Edge{
- int u,v,w,next;
- }e[*N];
- struct Q_Edge{
- int u,v,next,lca;
- }eq[*M];
- int head[N];
- int _head[N];
- int dis[N];
- int vis[N];
- int ances[N];
- int father[N];
- void addedge(int u,int v,int w,int &k){
- e[k].u = u;e[k].v = v;e[k].w= w;
- e[k].next = head[u];head[u]=k++;
- }
- void add_qedge(int u,int v,int &k){
- eq[k].u = u;eq[k].v = v;eq[k].lca = -;
- eq[k].next = _head[u];_head[u]=k++;
- }
- int _find(int u){
- if(u==father[u]) return father[u];
- return father[u] = _find(father[u]);
- }
- void unions(int u,int v){
- int x = _find(u),y = _find(v);
- father[x]=y;
- }
- void Targin(int u){
- vis[u] = true;
- ances[u]=father[u] = u;
- for(int k = head[u];k!=-;k=e[k].next){
- if(!vis[e[k].v]){
- int v = e[k].v,w = e[k].w;
- dis[v] = dis[u]+w;
- Targin(v);
- unions(v,u);
- ances[_find(u)] = u;
- }
- }
- for(int k = _head[u];k!=-;k=eq[k].next){
- if(vis[eq[k].v]){
- int v = eq[k].v;
- eq[k].lca = eq[k^].lca = ances[_find(v)];
- }
- }
- }
- int main()
- {
- int n;
- while(scanf("%d",&n)!=EOF){
- memset(head,-,sizeof(head));
- memset(_head,-,sizeof(_head));
- int tot=;
- for(int i=;i<n;i++){
- int u,v,w;
- scanf("%d%d%d",&u,&v,&w);
- addedge(u,v,w,tot);
- addedge(v,u,w,tot);
- }
- tot = ;
- int m;
- scanf("%d",&m);
- for(int i=;i<m;i++){
- int a,b,c;
- scanf("%d%d%d",&a,&b,&c);
- add_qedge(a,b,tot);
- add_qedge(b,a,tot);
- add_qedge(a,c,tot);
- add_qedge(c,a,tot);
- add_qedge(b,c,tot);
- add_qedge(c,b,tot);
- }
- memset(vis,,sizeof(vis));
- dis[]=;
- Targin();
- int a[];
- for(int i=;i<m;i++){
- int s = i*;
- a[] = dis[eq[s].u]+dis[eq[s].v]-*dis[eq[s].lca]; ///a->b
- a[] = dis[eq[s+].u]+dis[eq[s+].v]-*dis[eq[s+].lca]; ///a->c
- a[] = dis[eq[s+].u]+dis[eq[s+].v]-*dis[eq[s+].lca]; ///b->c
- //sort(a,a+3);
- printf("%d\n",(a[]+a[]+a[])/);
- }
- printf("\n");
- }
- }
zoj 3195的更多相关文章
- zoj 3195 Design the city LCA Tarjan
题目链接 : ZOJ Problem Set - 3195 题目大意: 求三点之间的最短距离 思路: 有了两点之间的最短距离求法,不难得出: 对于三个点我们两两之间求最短距离 得到 d1 d2 d3 ...
- zoj 3195(LCA加强版)
传送门:Problem 3195 https://www.cnblogs.com/violet-acmer/p/9686774.html 题意: 给一个无根树,有q个询问,每个询问3个点(a,b,c) ...
- zoj——3195 Design the city
Design the city Time Limit: 1 Second Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...
- ZOJ 3195 Design the city LCA转RMQ
题意:给定n个点,下面n-1行 u , v ,dis 表示一条无向边和边权值,这里给了一颗无向树 下面m表示m个询问,问 u v n 三点最短距离 典型的LCA转RMQ #include<std ...
- ZOJ - 3195 Design the city
题目要对每次询问将一个树形图的三个点连接,输出最短距离. 利用tarjan离线算法,算出每次询问的任意两个点的最短公共祖先,并在dfs过程中求出离根的距离.把每次询问的三个点两两求出最短距离,这样最终 ...
- zoj 3195 Design the city lca倍增
题目链接 给一棵树, m个询问, 每个询问给出3个点, 求这三个点之间的最短距离. 其实就是两两之间的最短距离加起来除2. 倍增的lca模板 #include <iostream> #in ...
- ZOJ 3195 Design the city 题解
这个题目大意是: 有N个城市,编号为0~N-1,给定N-1条无向带权边,Q个询问,每个询问求三个城市连起来的最小权值. 多组数据 每组数据 1 < N < 50000 1 < Q ...
- ZOJ 3195 Design the city (LCA 模板题)
Cerror is the mayor of city HangZhou. As you may know, the traffic system of this city is so terribl ...
- LCA问题的ST,tarjan离线算法解法
一 ST算法与LCA 介绍 第一次算法笔记这样的东西,以前学算法只是笔上画画写写,理解了下,刷几道题,其实都没深入理解,以后遇到新的算法要把自己的理解想法写下来,方便日后回顾嘛>=< R ...
随机推荐
- 禁用 nouveau 驱动
安装Nvidia显卡的官方驱动和系统自带的nouveau驱动冲突. 安装网上方法尝试了modprob.d/blacklist.conf里的各种修改,重启以后还是没有成功警用nouveau驱动 最后看见 ...
- Ubuntu 14.04 64bit下Caffe + Cuda6.5/Cuda7.0 安装配置教程
http://www.embeddedlinux.org.cn/emb-linux/entry-level/201612/21-6005.html 随着深度学习快速发展的浪潮,许多有兴趣的工作者都转入 ...
- ContentProvider学习
1.创建类继承ContentProvider类,并实现增.删.改.查功能. public static final String AUTHORITY = "com.diysoul.lists ...
- mac os x之解决npm安装包失败,或者nodejs工程缺少依赖
在国内做开发,由于各种各样的原因,导致网络总是那么不好,对于我们前端开发者,在使用npm的时候很可能因为网络问题导致包安装失败,然后我们又匆匆启动项目,导致缺少依赖等各种问题,下面将会介绍一个淘宝的n ...
- [技巧篇]07.JSON.parse() 和 JSON.stringify()
JSON.parse() 用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age&q ...
- css常见水平居中
行内元素居中 常见行内元素如文本,图片等居中时,通常是给父元素设置text-align:center 来实现.例如 HTML: <body> <div>我是文字,我要居中显示& ...
- 应用Xml.Linq读xml文件
c#提供了System.Xml.Linq操作xml文件,非常方便,本文主要介绍如何应用System.Xml.Linq读取xml文件. xml文本 <?xml version="1.0& ...
- [Unity]模拟雨水的折射效果
用GrabPass做的小玩具. 并不是真的计算了折射,只是简单地扰动了uv,对于雨水来说效果已经足够好了. Shader代码: Shader "Unlit/Rain" { Prop ...
- 【洛谷 P3899】 [湖南集训]谈笑风生 (主席树)
题目链接 容易发现\(a,b,c\)肯定是在一条直链上的. 定义\(size(u)\)表示以\(u\)为根的子树大小(不包括\(u\)) 分两种情况, 1.\(b\)是\(a\)的祖先,对答案的贡献是 ...
- 利用certutil.exe 传文件
certutill.exe 在Windows 7 及其之后的所有Windows Server和Workstation版本均预装 1. Encode file: certutil -encode kk. ...