JZOJ 3754 【NOI2014】魔法森林

WVP+ZLM国标平台实战:从设备注册失败到视频播放黑屏,我遇到的5个典型问题与解法 部署WVP+ZLM国标视频平台时,设备注册失败、视频播放黑屏等问题常常让运维人员头疼不已。本文将基于真实运维场景,剖析五个最具代表性的故障案例,提供从网络配置到版本兼容性的全链路解决方案。 阅读详情

Description:

为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为1,2,3, … , n,边标号为 1,2,3, … , m。初始时小 E 同学在 1 号节点,隐士则住在 n 号节点。小 E 需要通过这一片魔法森林,才能够拜访到隐士。

魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击。 幸运的是, 在 1 号节点住着两种守护精灵: A 型守护精灵与B 型守护精灵。小 E 可以借助它们的力量,达到自己的目的。

只要小 E 带上足够多的守护精灵, 妖怪们就不会发起攻击了。具体来说, 无向图中的每一条边 ei 包含两个权值 ai 与 bi 。 若身上携带的 A 型守护精灵个数不少于 ai ,且 B 型守护精灵个数不少于 bi ,这条边上的妖怪就不会对通过这条边的人发起攻击。当且仅当通过这片魔法森林的过程中没有任意一条边的妖怪向小 E 发起攻击,他才能成功找到隐士。

由于携带守护精灵是一件非常麻烦的事,小 E 想要知道, 要能够成功拜访到隐士,最少需要携带守护精灵的总个数。守护精灵的总个数为 A 型守护精灵的个数与 B 型守护精灵的个数之和。

Input:

输入文件的第 1 行包含两个整数 n, m,表示无向图共有 n 个节点, m 条边。

接下来 m 行,第 i + 1 行包含 4 个正整数 Xi, Yi, ai, bi, 描述第 i 条无向边。其中Xi与Yi为该边两个端点的标号,ai与bi的含义如题所述。

注意数据中可能包含重边与自环。

Output:

输出一行一个整数:如果小 E 可以成功拜访到隐士,输出小 E 最少需要携带的守护精灵的总个数;如果无论如何小 E 都无法拜访到隐士,输出“-1” (不含引号)。

Sample Input:

【样例输入 1】
4 5
1 2 19 1
2 3 8 12
2 4 12 15
1 3 17 8
3 4 1 17

【样例输入 2】
3 1
1 2 1 1

Sample Output:

【样例输出 1】
32

【样例输出 2】
-1

Data Constraint:

这里写图片描述

Hint:

【样例说明 1】
如果小 E 走路径 1→2→4,需要携带 19+15=34 个守护精灵;
如果小 E 走路径 1→3→4,需要携带 17+17=34 个守护精灵;
如果小 E 走路径 1→2→3→4,需要携带 19+17=36 个守护精灵;
如果小 E 走路径 1→3→2→4,需要携带 17+15=32 个守护精灵。
综上所述,小 E 最少需要携带 32 个守护精灵。

【样例说明 2】
小 E 无法从 1 号节点到达 3 号节点,故输出-1。

题解:

lct例题。
双关键字最小生成树。
把a排个序,依次添加边。
如果这条边的两端已在一棵树了,那么判断它们路径上的最大的b值是否大于当前要加的边,如果是,删掉那条边,加上这条边。
一直纠结于证明。
由于lct只能维护点权,所以把每条边都看作一个点。

#include<set>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;

const int Maxn = 50005, INF = 1e9;

int n, m, tt, ans, f[Maxn * 3];
int dd[Maxn * 3], fa[Maxn * 3], pf[Maxn * 3], t[Maxn * 3][2];
struct edge {
    int a, b, u, v;
}e[Maxn * 2];
struct node {
    int rev, b, z;
}a[Maxn * 3];

bool rank_e(edge a, edge b) {
    return a.a < b.a;
}

int find(int x) {return f[x] == x ? x : (f[x] = find(f[x]));}

int lr(int x) {return t[fa[x]][1] == x;}

void update(int x) {
    if(x) {
        a[x].b = x;
        if(e[a[a[t[x][0]].b].z].b > e[a[a[x].b].z].b) a[x].b = a[t[x][0]].b;
        if(e[a[a[t[x][1]].b].z].b > e[a[a[x].b].z].b) a[x].b = a[t[x][1]].b;
    }
}
void down(int x) {
    if(x && a[x].rev) {
        swap(t[x][0], t[x][1]);
        a[t[x][0]].rev ^= 1; a[t[x][1]].rev ^= 1;
        a[x].rev = 0;
    }
}
void rotate(int x) {
    int y = fa[x], k = lr(x);
    t[y][k] = t[x][!k]; if(t[x][!k]) fa[t[x][!k]] = y;
    fa[x] = fa[y]; if(fa[y]) t[fa[y]][lr(y)] = x;
    t[x][!k] = y; fa[y] = x; pf[x] = pf[y];
    update(y); update(x);
}
void xc(int x) {
    for(; x; x = fa[x]) dd[++ dd[0]] = x;
    for(; dd[0]; dd[0] --) down(dd[dd[0]]);
}
void splay(int x, int y) {
    xc(x);
    while(fa[x] != y) {
        if(fa[fa[x]] != y)
            if(lr(x) == lr(fa[x])) rotate(fa[x]); else rotate(x);
        rotate(x);
    }
}
void access(int x) {
    for(int y = 0; x; y = x, x = pf[x])
        splay(x, 0), fa[t[x][1]] = 0, pf[t[x][1]] = x,
        t[x][1] = y, fa[y] = x, pf[y] = 0, update(x);
}
void makeroot(int x) {
    access(x); splay(x, 0); a[x].rev ^= 1;
}
void link(int x, int y, int z, int b) {
    a[z].z = b; a[z].b = b;
    makeroot(x); pf[x] = z;
    makeroot(z); pf[z] = y;
}
void cut(int x, int y) {
    makeroot(x);
    access(y); splay(y, 0);
    fa[x] = pf[x] = t[y][0] = 0;
    update(y);
}

void Init() {
    scanf("%d %d", &n, &m);
    fo(i, 1, m) scanf("%d %d %d %d", &e[i].u, &e[i].v, &e[i].a, &e[i].b);
    sort(e + 1, e + m + 1, rank_e);
}

void dg(int x) {
    if(x == 0) return;
    printf("%d %d %d\n", x, t[x][0], t[x][1]);
    dg(t[x][0]); dg(t[x][1]);
}

int bz[Maxn];

void End() {
    tt = n; 
    e[0].b = -INF;
    ans = INF;
    fo(i, 1, n) update(i);
    fo(i, 1, n) f[i] = i;
    fo(i, 1, m) {
        int x = e[i].u, y = e[i].v;
        if(x == y) continue;
        if(find(x) != find(y)) {
            f[f[x]] = f[y];
            tt ++;
            link(x, y, tt, i);
            makeroot(x); splay(x, 0);
        } else {
            makeroot(x); 
            access(y); splay(x, 0);
            int g = a[x].b;
            if(e[a[g].z].b > e[i].b) {
                cut(e[a[g].z].u, e[a[g].z].v);
                tt ++;
                link(e[i].u, e[i].v, tt, i);
            }
        }
        if(find(1) == find(n)) {
            makeroot(n); access(1); splay(n, 0);
            ans = min(ans, e[i].a + e[a[a[n].b].z].b);
        }
    }
    if(ans == INF) printf("-1"); else printf("%d", ans);
}

int main() {
    Init();
    End();
}
YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题 Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。 阅读详情

相关推荐

保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil)

本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。

weixin_30236595的博客 458

BZOJ 3566 SHOI 2014 概率充电器 概率DP

题目大意:给出一棵树,每个节点都有一个充电概率,每一条边有一个导电概率,求期望有多少个点充电。 思路:写不出题解,粘一个详细的地址:http://wyfcyx.is-programmer.com/posts/74623.html CODE: #define _CRT_SECURE_NO_WARNINGS #include #include #include #

(╯°口°)╯(┴—┴ 1223

【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM

如果之前添加了网卡,这里就可以看见有3个网卡(没添加的现在再加也行),* Active *为Linux内核正在使用的网卡,另外两张是未启用的网卡(注:未启用的网卡在终端中使用ifconfig命令是查不到的,需要先使用ip addr找出网卡,再激活,此时网卡会变为* Active *状态。

lingshengxiyou的博客 2130

【NOI2014】魔法森林

Description为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为1,2,3, … , n,边标号为 1,2,3, … , m。初始时小 E 同学在 1 号节点,隐士则住在 n 号节点。小 E 需要通过这一片魔法森林,才能够拜访到隐士。魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会

Jacky35 504

GMSL Strapping Pins CFG0/CFG1 应用

如果 0x13.bit3 = 0, 则是链路没有 Locked,需要去排查下具体问题(通常是工作模式配置问题)如果遇到 Link 无法建立(Locked),电源没有问题的情况下,多半是加串器和解串器的工作模式不匹配。芯片在上电时,会检测这两个管脚的电压,根据不同的电压值,芯片进入到不同的工作模式。一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作。ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度。GMSL 的解串器也是类似的配置,具体请参考对应的规格书。

iStoneWalker的博客 1271

AirSim中图像API的应用

解析Airsim图像获取保存的api

fegxg的博客 1605

3754. 【NOI2014】魔法森林(LCT)

Problem 给定一个\(n\)个结点,\(m\)条边的的无向图,每条边有两个权值\(ai,bi\). 现在从\(1\)出发,要到达\(n\),每次只能沿着\(ai\le A\)且\(bi\le B\)的边走,求\(min(A+B)\). \(n\le 5*10^4,m\le 2*10^5\) Solution 经典的LCT题,拆边权为点权就没了. 顺便说一下LCT这个神奇的数据结构。...

dishuanglang5540的博客 330

046篇:数据统计:分组、求和、平均值、最大最小值

本文介绍了在RPA中实现数据分组统计的方法。通过字典+循环组合,可以完成按单字段或多字段的分组聚合操作,包括求和、计数、求平均值及最大/最小值等。文章详细讲解了分组统计的原理,并提供了单级分组、多级分组的具体实现步骤,最后通过销售数据按月分组的实战案例,演示了如何从原始数据到生成汇总报表的完整流程。这些方法可以灵活应用于各类数据统计分析场景。

weixin_59649563的博客 214

【NOI 2014】魔法森林

算法标签:LCT维护最小生成树中最大的边

forever_dreams的博客 466

【2026OD新机考】【哈希表】20260422-文章特征提取【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

90+天陪伴式学习,100+直播课时,300+动画图解视频,500+LeetCode经典题,500+华为OD真题/大厂真题,还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁。这道题的本质是多集合交集问题的变形,属于非常典型的哈希表应用题。,储存全局的每个片段中,各个字符最少出现的次数。表示该字母并非所有片段的公共字母。,按照顺序构建答案即可。没有字母在所有三个字符串中都出现。每个字母在各字符串中都至少出现。次,所以结果中每个字母出现一次。这样,当上述循环结束后,最终。显然在上述代码中,如果字母。

weixin_48157259的博客 66

AUTOSAR AP——SM模块

对AUTOSAR AP中状态管理模块SM,从模块定义、总结等多方面进行了介绍。

weixin_43627682的博客 284

NOI2014B. 魔法森林 (Magical Forest)

NOI2014B. 魔法森林 (Magical Forest)

yaosichengalpha的博客 347

【AI智能体】AI 编程 + 飞书CLI + Skills 重塑开发新范式实战操作详解

AI 编程 + 飞书CLI + Skills 重塑开发新范式实战操作详解

congge 3666

【JZOJ3754】【luoguP2387】【NOI2014】魔法森林

problem Description 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为1,2,3, … , n,边标号为 1,2,3, … , m。初始时小 E 同学在 1 号节点,隐士则住在 n 号节点。小 E 需要通过这一片魔法森林,才能够拜访到隐士。 魔法森林中居住了一些妖怪。每当有人经过一条...

路人黑的纸巾 590

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[JZOJ3754]【NOI2014】魔法森林

题目大意给定N个点M条边的无向图,每条边有两个权值a与b。求一条1到n的路径使得路径经过边的最大a与最大b的和最小。无法到达输出-1。 n<=50000,m<=100000。ai,bi<=50000分析看到ai这么小,我们考虑枚举ai然后算最小b。 那么从小到大枚举ai,不断加入边,边权为bi。 用LCT维护最小生成树即可。具体的,新加入一条边(x,y),若不在同一联通块就link,在同一联

ZLTJohn的博客 1045

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【jzoj3754】【NOI2014】【魔法森林】【lct】

题目大意为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为1,2,3, … , n,边标号为 1,2,3, … , m。初始时小 E 同学在 1 号节点,隐士则住在 n 号节点。小 E 需要通过这一片魔法森林,才能够拜访到隐士。魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击。

inklutcuah’s blog 434

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[NOI2014][JZOJ3754][BZOJ3669]魔法森林

题目大意给定一个nn个点mm条边的无向图。每条边有两个权值(ai,bi)(a_i,b_i)。 你需要找到一条从11到nn的路径,使得路径上aia_i最大值与bib_i最大值的和尽量小。2≤n≤5×104,0≤m≤105,1≤ai,bi≤5×1042\le n\le 5\times10^4,0\le m\le10^5,1\le a_i,b_i\le5\times10^4题目分析这题看上去就很mst套

待成熟的葡萄 613

BZOJ 3669 . JZOJ 3754. 【NOI2014】魔法森林

BZOJ 3669 . JZOJ 3754. 【NOI2014】魔法森林 Description为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为1,2,3, … , n,边标号为 1,2,3, … , m。初始时小 E 同学在 1 号节点,隐士则住在 n 号节点。小 E 需要通过这一片魔法森林,才能够拜访到隐士。魔法森林中居

Felix-Lee的博客 399

BZOJ 3892 Usaco2014 Dec Marathon DP

题目大意:给出平面上的一些点,要求按顺序遍历,费用是两点之间的曼哈顿距离,可以跳过k次,问最少需要花费多少。 思路:O(n^3)dp就行了。 CODE: #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #define MAX 510 using namespace std;

(╯°口°)╯(┴—┴ 1033

DP--背包九讲学习笔记

一、01背包的空间优化

cokomowang的专栏 664

POJ题目难易总汇

POJ从简到难(按照AC数目排序)的列表如下,作为小弱的刷题顺序。大牛们可以看后面倒排的hard表,还有四道题没人拿到first blood. 表格属性依次为:ID,Title, Ratio, AC, Submit 1000 A+B Problem 0.55 188072 338977 1004 Financial Management 0.41 58282 140301 1003 Hangove...

Modestr的博客 1万+

ZOJ3329之经典概率DP

One Person Game Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and Die3. Die1 ha

Stephen 3196

[bzoj3754][GDOI2014模拟]Tree

Description最小标准差生成树。。。。 n<=100,m<=2000,边权<=100Solution其实我比赛时想的是可以的,不过不用二分,而用枚举。 没错,枚举平均数。 不过,可能的数太多了,得另想办法。 我们把排好序的数按顺序排列,对于相邻的两个数a和b,和他们的平均数ave,区间[a,ave]中的任意一个数为平均数所形成的最小生成树都是一样的。 同理[ave,b]。 所以我

时光真疯狂, 我一路执迷于匆忙. 729

简单dp(多重背包问题)

Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 31369   Accepted: 10679 Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverlan...

henucm的博客 539

BZOJ 3522 POI 2014 Hotel 树形DP

题目大意给出一棵树,问选择三个点,使得这三个点相互的距离相等的方案有多少种。思路这三个点肯定不能再一条链上, 那么就肯定能够确定一个中心点,使得三个点到这个中心点的距离都相等。 之后我们就可以枚举这个中心点,对于每个深度统计一下就可以了。虽然看起来像是O(n3)O(n^3)的,但是跑的飞起啊。CODE#define _CRT_SECURE_NO_WARNINGS#include <cstdio>

(╯°口°)╯(┴—┴ 1269

浅谈Link Cut Tree

LCT

Hawo11的博客 734
上一篇: 初识lct——洛谷p3203 bzoj2002 [HNOI2010]BOUNCE 弹飞绵羊
下一篇: 网络流二元关系
Cold_Chair
博客等级 码龄11年 158粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值