洛谷P1967题解

题解:洛谷 P1967 [NOIP 2013 提高组] 货车运输 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。每一条道路对车辆都有重量限制,简称限重。,之间用一个空格隔开,表示一辆货车需要从。,每两个整数之间用一个空格隔开,表示从。,两座城市之间可能有多条道路。#提高+# #生成树# 阅读详情

首先找出图中每个连通分量的最大生成树,然后在树上跑LCA。寻找LCA的时候寻找路径上的最小权值。

#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;

#define MaxN 10005
#define MaxM 50005
#define LogN 20
#define INF 0x7fffffff

int N, M, Q;

int point[MaxN], tot;
int nxt[MaxM], v[MaxM], w[MaxM];

void add(int x, int y, int z){
    ++tot; nxt[tot] = point[x];
    v[tot] = y; w[tot] = z; point[x] = tot;
}

int fa[MaxN];
bool isfa[MaxN];
int find(int x){
    return x == fa[x] ? fa[x] : fa[x] = find(fa[x]);
}

int deep[MaxN];
bool flag[MaxN];
int f[MaxN][LogN];
int g[MaxN][LogN];

void dfs(int node, int ff, int ww, int d){
    deep[node] = d;
    flag[node] = true;
    f[node][0] = ff;
    g[node][0] = ww;
    for(int i = point[node]; i; i = nxt[i]){
        if(flag[v[i]]) continue;
        dfs(v[i], node, w[i], d+1);
    }
}

void process(){
    for(int j = 1; j<LogN; ++j)
        for(int i = 1; i<=N; ++i){
            f[i][j] = f[f[i][j-1]][j-1];
            g[i][j] = min(g[i][j-1], g[f[i][j-1]][j-1]);
        }
}

struct EDGE{
    int x, y, z;
    bool operator < (const EDGE &e) const{
        return z > e.z;
    }
}edge[MaxM];

void Kruskal(){
    sort(edge+1, edge+1+M);
    for(int i = 1; i<=N; ++i) fa[i] = i;
    for(int i = 1; i<=M; ++i){
        int fx = find(edge[i].x);
        int fy = find(edge[i].y);
        if(fx == fy) continue;
        fa[fx] = fy;
        add(edge[i].x, edge[i].y, edge[i].z);
        add(edge[i].y, edge[i].x, edge[i].z);
    }
}

int find_LCA(int x, int y){
    int fx = find(x);
    int fy = find(y);
    if(fx != fy) return -1;
    int _min = INF;
    if(deep[x]<deep[y]) swap(x, y);
    for(int j = LogN-1; j>=0; --j){
        if(deep[f[x][j]]>=deep[y]){
             _min = min(_min, g[x][j]);
            x = f[x][j];
        }
    }
    if(x == y) return _min;
    for(int j = LogN-1; j>=0; --j){
        if(f[x][j] != f[y][j]){
            _min = min(_min, min(g[x][j], g[y][j]));
            x = f[x][j]; y = f[y][j];
        }
    }
    return min(_min, min(g[x][0], g[y][0]));
}

int main(){
    scanf("%d %d", &N, &M);
    for(int i = 1; i<=M; ++i){
        scanf("%d %d %d", &edge[i].x, &edge[i].y, &edge[i].z);
    }
    Kruskal();    
    for(int i = 1; i<=N; ++i) isfa[find(i)] = true;
    for(int i = 0; i<=N; ++i)
        for(int j = 0; j<LogN; ++j)
            g[i][j] = INF;
    for(int i = 1; i<=N; ++i) 
        if(isfa[i]) dfs(i, 0, INF, 1);
    process();
    scanf("%d", &Q);
    for(int i = 1; i<=Q; ++i){
        int x, y;
        scanf("%d %d", &x, &y);
        printf("%d\n", find_LCA(x, y));
    }
    return 0;
}

 

数据预处理的分箱操作 数据分箱 介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。 数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。 知识点 无监督分箱 split 分箱 merge 分箱 无监督分箱 这里为了 阅读详情

相关推荐

512分辨率万能遮罩模型实战指南:从下载到高精度应用

本文提供了512分辨率万能遮罩模型的完整实战指南。该模型经过超过540万次迭代,专门优化了对头发、手、眼睛等复杂区域的识别。文章详细介绍了从可靠渠道下载、环境部署、使用DF_ICE工具批量应用遮罩,到利用XSeg Editor进行高精度精修的全流程,旨在帮助用户显著提升AI换脸合成视频的质量与效率。

y2z3a4b5c的博客 1165

【洛谷】P1967

图论 #重构树 #倍增。

Antonio915的博客 1254

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5811

洛谷:P1967 [NOIP2013 提高组] 货车运输(LCA —— 求两点间路径上最小边的权值)

洛谷:货车运输 理解了求严格次小生成树那道题的做法,此题就很简单了,不过需要动脑筋贪心思维一下 #include<bits/stdc++.h> #include<unordered_set> #include<unordered_map> #define mem(a,b) memset(a,b,sizeof a) #define cinios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)) #define sca

酒姬民的博客 352

Xilinx Blockset Counter计数器模块使用及参数配置

本文详细介绍了Simulink中Xilinx Blockset库Counter模块的使用以及参数说明。

白码王子小张的博客 1096

从Power到HO:一文搞懂主流脑图谱在DPABI里怎么选,让你的rs-fMRI分析更精准

本文深入解析了rs-fMRI分析中主流脑图谱(如Power、HO、AAL等)在DPABI中的科学选择策略,帮助研究者根据不同的神经科学研究目标优化分析流程。从解剖学图谱到功能连接图谱的特性对比,到DPABI实操中的多图谱分析工作流,提供了全面的方法论指导,助力提升静息态功能磁共振成像(rs-fMRI)研究的精准度和可重复性。

weixin_30654583的博客 403

洛谷P1967 [NOIP 2013 提高组] 货车运输

题目摘要 洛谷P1967 [NOIP2013提高组]货车运输:给定n个城市和m条双向限重道路,q次询问两城市间的最大载货量(即路径最小限重的最大值)。若无法到达则输出-1。 解题思路 最大生成树:构建最大生成树确保两点间路径的限重最大 树链剖分:将树结构转化为线性结构,便于查询 线段树:维护区间最小值,快速查询路径最小限重 关键算法 Kruskal算法构建最大生成树 树链剖分实现路径分解 线段树维护区间最小值查询 代码实现 使用结构体存储边,并查集实现Kruskal算法。通过两次DFS完成树链剖分,线段树处

yjfyjfyjf54188的博客 1099

DSMA时序修复避坑指南:当Setup和Hold互卡时,除了调Margin还能做什么?

本文深入探讨DSMA时序修复中的Setup与Hold互锁问题,提供7种高阶策略,包括优先级判断、高级参数组合、单元类型智能替换等,帮助工程师突破时序收敛瓶颈。特别针对fix_eco_timing命令的隐藏参数和物理协同优化进行详细解析,助力芯片设计实现时序收敛。

weixin_30162121的博客 296

货车运输

题目 https://www.luogu.org/problemnew/show/P1967 思路 构造最大生成树,将其余的边去除。 得到了这样一个树之后,我们便考虑如何求出两个节点之间最小边权的最大值(即为题中的最大载重),因为这两点之间的路径是唯一的,我们只需要找出这条路径便可以得到答案。我们可以通过LCA来做到这一点,我求LCA的方法是先从每一个根节点进行搜索,求出节点深度等信息,然后利用这...

Brute♂force 688

RK3568平台(网络篇)添加网络交换芯片RTL8306M

该交换芯片支持I2C、SPI、mdio通信,但是看ast1520的uboot代码采用的是mdio去通信phy芯片的,所以暂时也先采用mdio的方式,需要配置相应的引脚才可以配置成mdio通信模式,具体的配置硬件工程师解决。RTL8306M芯片上可能没有提供MDC/MDIO接口,可以通过GPIO(General Purpose Input/Output)来模拟,GPIO可实现串行输入输出,且一般CPU上会提供很多GPIO接口供用户自定义使用。

weixin_49303682的博客 3934

如何利用air780e与stm32c8c6进行通信实现给手机发送一条英文短信的功能?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1237

P1967 货车运输(最大生成树,LCA)

接下来 m 行每行三个整数x,y,z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z 的道路。接下来 q 行,每行两个整数 x,y,之间用一个空格隔开,表示一辆货车需要从 x 城市运输货物到 y 城市,保证 x≠y。A 国有 n 座城市,编号从 11 到 n,城市之间有 m 条双向道路。第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道路。共有 q 行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。

m0_63761643的博客 377

Arduino与震动马达模块握手

震动马达模块采用采用高品质手机震动马达,适用于震动感互动产品的制作,可穿戴智能设备震动提醒,适合作为非可听指示器的小型振动马达。当输入为高电平时电动机会震动,就像你的静音模式的手机一样。

vor234的博客 5847

【题解】【洛谷 P1967】 货车运输

目录 洛谷 P1967 货车运输 原题 题解 思路 代码 洛谷 P1967 货车运输 原题 题面请查看洛谷 P1967 货车运输。 题解 思路 根据题面,假设我们有一个普通的图: 作图工具:Graph Edit...

weixin_30387663的博客 239

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【题解】洛谷P1967 [NOIP2013TG] 货车运输(LCA+kruscal重构树)

洛谷P1967:https://www.luogu.org/problemnew/show/P1967 思路 感觉2013年D1T3并不是非常难 但是蒟蒻还是WA了一次 从题目描述中看出每个点之间有许多条路径 而我们需要的是找出整条路径中最大的最小可通过量 一开始看到题目会想到是不是最大流问题 但是仔细一想其实并不用那么麻烦 我们只需要用kruscal找出最大生成树...

206

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

洛谷 P1967 货车运输(lca+最小生成树) 题解

题目来源: https://www.luogu.org/problemnew/show/P1967 题目描述: 题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。 输入输出格式 输入格式:   第一行有两个用一个空格...

摇摇乐的博客 699

洛谷 P1967 货车运输 题解(lca+kruskal)

前记 最近lca+kruskal的题目真让我疯了,我还是太菜了 题目链接 题目思路 显然是找到最大生成树,然后lca求解。自己其实想到了怎么写,但是就是dfs()的那一步和init()的初始化不会。 总之是属于代码实现能力太弱导致而成的。里面有许多需要注意的地方都在代码里面说了 代码 #include<bits/stdc++.h> using namespace std; const ...

hunxuewangzi的博客 248

【题解】洛谷P1967 货车运输(最大生成树 倍增)

前排提醒,对于倍增数组可以开大。。但千万不能开小,否则结果一定不对。。在这里卡了2h。。。 可以发现有一些权值较小的边是不会被走过的。正如样例中的第三条边,就算有其他的很多条边,这条边无论如何也是不会被走过的。于是我们想到了可以将图中这样的边去掉,按照这个思路我们便想到了构造最大生成树,将其余的边去除。 得到了这样一个树之后,我们便考虑如何求出两个节点之间最小边权的最大值(即为题中的最大载重)...

Rem_Inory的博客 426

洛谷-P1967货车运输

题解 洛谷P1967货车运输 说到1967,这是一个神奇的日子… 在公元1967年,在圆谷株式会社诞生了一个神作----ultra seven!!! 对于seven的知名度,L_Y_T略略的计算了一下: ans=(∑i=1nn−初代年份n∗1n)×100ans = (\sum_{i=1}^{n}\frac{n-初代年份}{n}*\dfrac{1}{n})\times100ans=(∑i=1n​nn...

L_Y_T020321的博客 342

【题解】洛谷P1967货车运输[NOIP2013](同sdoj1807) 最大生成树+lca

题目链接 跑一遍最大生成树,把选出来的边连双向边建树,树上跑lca时加一个容量cap[i][j],表示i点向上跳2^j路径最小值 bfs要判重啊啊啊啊啊啊……因为没判重T过好几次了,不长记性 (注释部分读入挂加了直接WA……不知道为什么,太弱了没看出来,有大佬看出来了请讲一下) #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;...

翻过这座山,他们就会听到你的故事 290

NOIP2013·洛谷·货车运输

初见安~这里是传送门:洛谷P1967 题目描述 AA国有nn座城市,编号从11到nn,城市之间有mm条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有qq辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。 输入格式: 第一行有两个用一个空格隔开的整数n,mn,m,表示AA国有nn座城市和mm条道路。 接下来mm行每行33个整...

樱狸✨愿携清风归来处 1165

【NOIP2013】洛谷1967 货车运输题解(树上倍增)

题目:luogu1967. 题目大意:A国有nnn座城市,编号从111到nnn,城市之间有mmm条双向道路.每一条道路对车辆都有重量限制(限重).现在有qqq辆货车在运输货物,司机们想知道每辆车在不超过车辆限制的情况下,最多能运多重的货物. 这道题暴力30分就可以直接跑spfa来做. 考虑对于每一条路径可以运输的最重的货物重量是路径上最小的边权,发现这个性质后就可以想到图的最大生成树也有这个性质,...

hzk_cpp的博客 341

洛谷P1967 货车运输

首先说这道题的思路:存在多条路径时求路径最大权的最小值问题,可以利用生成树的性质重建给出的图,将多路径转化为一定最优的单一路径,再在树上求LCA时统计权值来求出“路径最大权的最小值”。 写这份代码的时候复习了几个重要的知识点: 并查集 在写生成树时,经常会用到并查集。 ll find(ll x) { if(b[x]==x) return x; else return b[x]=find(b[x...

qq_40461481的博客 174

洛谷大起义胜利的经验总结

UPD1(2019.7.11):chen_zhe解除了对我的禁言,但仍保持大脑皮层对刷题重心转到LibreOJ的决策,50年不变. 2019-07-09 9:54 结束黑暗无光的\(luogu\)统治时期. 2019-07-09 9:56:24 开始从零开始的\(LOJ\)刷题生活! 这样算下来的话,我离开洛谷有一天左右了. 为什么要离开洛谷呢,这实在是因为洛谷腐朽无比. 一个宣称为"有亲和力的计...

weixin_30666753的博客 338

洛谷1967 货车运输

to神犇:请自动跳过前x行的吐槽,因为吐槽内容可能只是一些极其无聊的bug和友情提示…… 一道极其经典且相当BT的图论题,不过目前看来与运输计划相比似乎更仁慈一些。在你下定决心AC这道题之前,你首先要做好debug到怀疑人生的准备,最好准备一瓶眼药水以备不测,当然有一份画风清奇简约养眼的题解也是极好的……;其次,你要明白这道题的代码长度——不压缩180左右——所以要有足够的耐心,找一把舒适的椅子

zero_from的博客 618
上一篇: 洛谷P3379题解
下一篇: 严格次小生成树 洛谷P4180题解
Coder.AN
博客等级 码龄9年 8粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值