• 题意:有\(n\)个点,\(n-1\)条边,每条边正向和反向有两个权值,且每条边最多只能走两次,有\(m\)次询问,问你从\(u\)走到\(v\)的最大权值是多少.

  • 题解:可以先在纸上画一画,不难发现,除了从\(u\)走到\(v\)的路径上的反向权值我们取不到,其他所有边的正反权值均能取到,所以答案就是:\(sum-u->v路径的反向权值\),问题也就转换成了求\(v->u\)的权值,那么这里我们就可以用LCA来求了.

    首先,令一个点为根节点,然后求出\(v\)到根节点的距离和根节点到\(u\)的距离,再减去根节点到\(LCA(u,v)\)的正反权值,就是\(v->u\)的权值.

    这题会卡读入,记得用scanf.

  • 代码:

    struct misaka{
    int out;
    int val1,val2;
    }p; int t;
    int n,m;
    int sum;
    vector<misaka> V[N];
    int fa[N][30];
    int depth[N];
    int lg[N];
    int dis1[N],dis2[N];
    bool st[N]; void dfs(int node){ //求每个节点到根节点的距离.
    st[node]=true;
    for(auto w:V[node]){
    int now=w.out;
    int val1=w.val1;
    int val2=w.val2;
    if(st[now]) continue;
    dis1[now]=dis1[node]+val1;
    dis2[now]=dis2[node]+val2;
    dfs(now);
    }
    } void presol(int node,int fath){
    fa[node][0]=fath;
    depth[node]=depth[fath]+1;
    for(int i=1;i<=lg[depth[node]]-1;++i){
    fa[node][i]=fa[fa[node][i-1]][i-1];
    }
    for(auto w:V[node]){
    if(w.out!=node){
    presol(w.out,node);
    }
    }
    } int LCA(int x,int y){
    if(depth[x]<depth[y]){
    swap(x,y);
    }
    while(depth[x]>depth[y]){
    x=fa[x][lg[depth[x]-depth[y]]-1];
    }
    if(x==y) return x;
    for(int k=lg[depth[x]]=1;k>=0;--k){
    if(fa[x][k]!=fa[y][k]){
    x=fa[x][k];
    y=fa[y][k];
    }
    }
    return fa[x][0];
    } int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>t;
    while(t--){
    cin>>n;
    sum=0;
    for(int i=1;i<=n-1;++i){
    int u,v,val1,val2;
    cin>>u>>v>>val1>>val2;
    p.out=v,p.val1=val1,p.val2=p.val2;
    V[u].pb(p);
    p.out=u,p.val1=val2,p.val2=p.val1;
    V[v].pb(p);
    } for(int i=1;i<=n;++i){
    lg[i]=lg[i-1]+(1<<lg[i-1]==i);
    } dfs(1);
    presol(1,0); cin>>m;
    for(int i=1;i<=m;++i){
    int u,v;
    cin>>u>>v;
    cout<<sum-(dis1[u]+dis2[v]-dis1[LCA(u,v)]-dis2[LCA(u,v)])<<endl;
    } } return 0;
    }

GYM101810 ACM International Collegiate Programming Contest, Amman Collegiate Programming Contest (2018) M. Greedy Pirate (LCA)的更多相关文章

  1. [ACM International Collegiate Programming Contest, Amman Collegiate Programming Contest (2018)]

    https://codeforces.com/gym/101810 A. Careful Thief time limit per test 2.5 s memory limit per test 2 ...

  2. ACM International Collegiate Programming Contest World Finals 2014

    ACM International Collegiate Programming Contest World Finals 2014 A - Baggage 题目描述:有\(2n\)个字符摆在编号为\ ...

  3. ACM International Collegiate Programming Contest World Finals 2013

    ACM International Collegiate Programming Contest World Finals 2013 A - Self-Assembly 题目描述:给出\(n\)个正方 ...

  4. ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2018) Syria, Lattakia, Tishreen University, April, 30, 2018

    ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2018) Syr ...

  5. ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. Poor Ramzi -dp+记忆化搜索

    ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. ...

  6. 18春季训练01-3/11 2015 ACM Amman Collegiate Programming Contest

    Solved A Gym 100712A Who Is The Winner Solved B Gym 100712B Rock-Paper-Scissors Solved C Gym 100712C ...

  7. Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  8. IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 Industry Track Call for Papers

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  9. 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest

    2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest A - Arranging Wine 题目描述:有\(R\)个红箱和\(W\)个白箱,将这 ...

随机推荐

  1. Payment Spring Boot 1.0.4.RELEASE 发布,最易用的微信支付 V3 实现

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 欢迎ISSUE,欢迎 ...

  2. 【Spring】IoC概述

    Spring框架的核心概念--IoC IoC IoC是Inversion of Control的简写,翻译成汉语就是"控制反转".IoC并不是一门技术,而是一种设计思想,在Spri ...

  3. scp传文件夹

    scp -r /root/backupdb/2014-08-15(文件夹)    root@192.168.1.98:/root(目录)

  4. qmake奇淫技巧之字符串宏定义

    阅读本文大概需要3.3分钟 我们平时在软件开发过程中需要定义一些宏,以便在代码中调用,这样每次不需要修改代码,只需要修改外部编译命令就可以得到想要的参数,非常方便 比如我们想在软件介绍中显示软件版本, ...

  5. 【Oracle】DRM官方介绍

    DRM 简介 By:  Allen Gao 首先,我们对和DRM 相关的一些概念进行介绍. Buffer: 对于RAC 数据库,当一个数据块被读入到buffer cache后,我们就称其为buffer ...

  6. pandas数据分析API常用操作

    1.导入数据 df = pd.read_csv( # 该参数为数据在电脑中的路径,可以不填写 filepath_or_buffer='/Users/Weidu/Desktop/sz000002.csv ...

  7. Linux Ubuntu系统版本通过Crontab设置定时任务的执行

    Linux Ubuntu系统版本通过Crontab设置定时任务的执行 本文由本人收集网络信息总结而来 特别鸣谢:https://linux.zone/2258 1 crontab 简单介绍以及语法使用 ...

  8. linux自定义安装位置安装jdk

    注:本文系参考网络内容及本人实践得出 1 下载jdk安装包 下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downl ...

  9. 全栈性能测试修炼宝典-JMeter实战笔记(二)

    性能测试初体验 性能测试实质:利用工具去模拟大量用户操作来验证系统能够承受的负载情况,找出潜在的性能问题,分析并解决:找出系统性能变化趋势,为后续的扩展提供参考 测试分类 测试内容中,负载测试.压力测 ...

  10. VS2019中scanf返回值被忽略的问题及其解决方法

    目录 [问题](#昨天在使用Visual Studio 2019编写C语言程序时遇到了scanf返回值被忽略问题) 问题原因 方法① 方法② 方法③ 方法④ 昨天在使用Visual Studio 20 ...