洛谷P7528 [USACO21OPEN] Portals G

P7528 [USACO21OPEN] Portals G

luogu题目传送门

题目描述

Bessie 位于一个由 N N N 个编号为 1 … N 1\dots N 1N 的结点以及 2 N 2N 2N 个编号为 1 ⋯ 2 N 1\cdots 2N 12N 的传送门所组成的网络中。每个传送门连接两个不同的结点 u u u v v v u ≠ v u≠v u=v)。可能有多个传送门连接同一对结点。

每个结点 v v v 与四个不同的传送门相连。与 v v v 相连的传送门列表由 p v = [ p v , 1 , p v , 2 , p v , 3 , p v , 4 ] p_v=[p_{v,1},p_{v,2},p_{v,3},p_{v,4}] pv=[pv,1,pv,2,pv,3,pv,4] 给出。

你的当前位置可以用有序对(当前结点,当前传送门)表示;即一个有序对 ( v , p v , i ) (v,p_{v,i}) (v,pv,i)
,其中 1 ≤ v ≤ N 1\le v\le N 1vN 以及 1 ≤ i ≤ 4 1\le i\le 4 1i4。你可以使用以下任一操作来改变你的当前位置:

    1. 由穿过当前传送门来改变当前结点。
    1. 改变当前传送门。在每一个结点上,列表的前两个传送门是配对的,后两个传送门也是配对的。也就是说,如果你的当前位置是 ( v , p v , 2 ) (v,p_{v,2}) (v,pv,2),你可以转而使用传送门 ( v , p v , 1 ) (v,p_{v,1}) (v,pv,1),反之亦然。类似地,如果你的当前位置是 ( v , p v , 3 ) (v,p_{v,3}) (v,pv,3),你可以转而使用传送门 ( v , p v , 4 ) (v,p_{v,4}) (v,pv,4),反之亦然。没有其他改变传送门的方式(例如,你不能从传送门 p v , 2 p_{v,2} pv,2 转去传送门 p v , 4 p_{v,4} pv,4 )。

总共有 4 N 4N 4N 个不同的位置。不幸的是,并不一定每一个位置都可以从另外的每一个位置经过一系列操作而到达。所以,以 c v c_v cv 哞尼的代价,你可以以任意顺序重新排列与 v v v 相邻的传送门列表。在此之后,列表中的前两个传送门互相配对,同时后两个传送门也互相配对。

例如,如果你将与 v v v 相邻的传送门以 [ p v , 3 , p v , 1 , p v , 2 , p v , 4 ] [p_{v,3},p_{v,1},p_{v,2},p_{v,4}] [pv,3,pv,1,pv,2,pv,4] 的顺序重新排列,这意味着如果你位于结点 v v v

  • 如果你当前位于传送门 p v , 1 p_{v,1} pv,1 ,你可以转而使用传送门 p v , 3 p_{v,3} pv,3,反之亦然。
  • 如果你当前位于传送门 p v , 2 p_{v,2} pv,2 ,你可以转而使用传送门 p v , 4 p_{v,4} pv,4,反之亦然。
    你不再能够从传送门 p v , 1 p_{v,1} pv,1
    转至传送门 p v , 2 p_{v,2} pv,2,或从传送门 p v , 3 p_{v,3} pv,3 转至 p v , 4 p_{v,4} pv,4 ,反之亦然。

计算修改这一网络使得每一个位置都可以从另外的每一个位置到达所需要花费的哞尼的最小数量。输入保证存在至少一种修改网络的合法方式。

输入格式

输入的第一行包含 N N N

以下 N N N 行每行描述一个结点。第 v + 1 v+1 v+1 行包含五个空格分隔的整数 c v , p v , 1 , p v , 2 , p v , 3 , p v , 4 c_v,p_{v,1},p_{v,2},p_{v,3},p_{v,4} cv,pv,1,pv,2,pv,3,pv,4

输入保证对于每一个 v v v p v , 1 , p v , 2 , p v , 3 , p v , 4 p_{v,1},p_{v,2},p_{v,3},p_{v,4} pv,1,pv,2,pv,3,pv,4 各不相同,且每个传送门出现在恰好两个结点的邻接表中。

输出格式

输出一行,包含修改这一网络使得每一个位置都可以从另外的每一个位置到达所需要花费的哞尼的最小数量。

输入输出样例 #1

输入 #1

5
10 1 4 8 9
11 1 2 5 6
12 9 10 2 3
3 4 3 6 7
15 10 8 7 5

输出 #1

13

说明/提示

样例解释

重新排列结点 1 1 1 4 4 4 的邻接表就已足够。这需要总计 c 1 + c 4 = 13 c_1+c_4=13 c1+c4=13 哞尼。我们可以使 p 1 = [ 1 , 9 , 4 , 8 ] p_1=[1,9,4,8] p1=[1,9,4,8] 以及 p 4 = [ 7 , 4 , 6 , 3 ] p_4=[7,4,6,3] p4=[7,4,6,3]

数据范围与约定

2 ≤ N ≤ 1 0 5 2\le N\le 10^5 2N105 1 ≤ c v ≤ 1 0 3 1\le c_v\le 10^3 1cv103

思路

首先先翻译一下这冗长的题目:

给定N个节点,对于每个节点u,u与4个传送门相连,你可以从一个节点通过传送门到达其他节点,且初始1,2号、3,4号传送门是相连的。你可以花费 c v c_{v} cv元改变连通顺序,但原来的连通会被废除

那么想要到达每一个节点吗,我们只需要到达每一个传送门即可,那样例的图可化为:
在这里插入图片描述
这时我们会发现,每一个连通块恰好为一个环,那这有什么用呢?
由于我们需要将每个连通块合并,但我们担心的是如果我们调换传送门的顺序,我们会不会把当前的连通块打碎?
由于每个连通块恰好为一个环,我们改变顺序后,肯定会打破两条边,而且这两条边一定不在一个环上,由此打破两条边后,会得到两条链,将链连接起来后,又是一条环,这样就可以一直合并。
不过我们还需要证明一下每一个连通块必定是一个环
因为每个传送门与两个节点相连,所以他的度数为2(与其他传送门相连的度数),所以连通块必定是一个环
那这样就很好做了,我们一开始先将所有的连通块处理出来,由于要连通,我们很容易就想到了最小生成树,由此用kruskal求解即可

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int fa[N],n;
struct lit{int x,y,z;friend bool operator<(lit t1,lit t2){return t1.z<t2.z;}
}b[N];
int o=0;
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void merge(int x,int y){//合并int f1=find(x),f2=find(y);if(f1!=f2)fa[f1]=f2;
}
int main(){cin>>n;for(int i=1;i<=n*2;i++)fa[i]=i;//记得要初始化,而且是2*N个传送门初始化for(int i=1;i<=n;i++){int c,x,y,z,w;cin>>c>>x>>y>>z>>w;merge(x,y);merge(z,w);//不需要花钱,直接合并b[++o]={x,z,c};//改变顺序需要花费c元,由于z,w连通,改到x,z与x,w一致}sort(b+1,b+1+o);int ans=0;for(int i=1;i<=o;i++){int f1=find(b[i].x),f2=find(b[i].y);if(f1!=f2){fa[f1]=f2;ans+=b[i].z;}}//最小生成树cout<<ans<<'\n';return 0;
}

总结

对于这种题目描述冗长的题目,一定要先简化题目再做题,不要向我·一样被题目所迷惑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++STL——priority_queue

优先队列 前言优先队列仿函数头文件 前言 本篇主要讲解优先队列及其底层实现。 优先队列 优先队列的本质就是个堆&#xff0c;其与queue一样&#xff0c;都是容器适配器&#xff0c;不过优先队列是默认为vector实现的。priority_queue的接口优先队列默认为大根堆。 仿函数 …

助力你的Neovim!轻松管理开发工具的魔法包管理器来了!

在现代编程环境中&#xff0c;Neovim 已经成为许多开发者的编辑器选择。而针对 Neovim 的各种插件与功能扩展&#xff0c;则是提升开发体验的重要手段。今天我们要介绍的就是一个强大而便捷的开源项目——mason.nvim&#xff0c;一个旨在简化和优化 Neovim 使用体验的便携式包管…

Java-Lambda 表达式

Lambda 表达式是 Java 8 引入的一项重要特性&#xff0c;它提供了一种简洁的方式来表示匿名函数。Lambda 表达式主要用于简化函数式接口的实现&#xff0c;使代码更加简洁和易读。以下是关于 Lambda 表达式的详细阐述&#xff1a; 1. Lambda 表达式的基本语法 Lambda 表达式的…

05 mysql之DDL

一、SQL的四个分类 我们通常可以将 SQL 分为四类&#xff0c;分别是&#xff1a; DDL&#xff08;数据定义语言&#xff09;、DML&#xff08;数据操作语言&#xff09;、 DCL&#xff08;数据控制语言&#xff09;和 TCL&#xff08;事务控制语言&#xff09;。 DDL 用于创建…

1 2 3 4 5顺序插入,形成一个红黑树

红黑树的特性与优点 红黑树是一种自平衡的二叉搜索树&#xff0c;通过额外的颜色标记和平衡性约束&#xff0c;确保树的高度始终保持在 O(log n)。其核心特性如下&#xff1a; 每个节点要么是红色&#xff0c;要么是黑色。根节点和叶子节点&#xff08;NIL节点&#xff09;是…

微服务6大拆分原则

微服务6大拆分原则 微服务拆分是指将一个大型应用程序拆分成独立服务的过程&#xff0c;在微服务拆分时&#xff0c;需要考虑以下6大微服务拆分原则 一、单一职责原则 微服务单一职责原则&#xff0c;是指每个微服务应该专注于解决一个明确定义的业务领域或功能&#xff0c;…

java: Compilation failed: internal java compiler error 报错解决方案

java: Compilation failed: internal java compiler error 报错解决方案 如下图所示&#xff1a; 在编译的时候提示 java: Compilation failed: internal java compiler error 原因&#xff1a;内部 java 编译错误,一般是编译版本不匹配。 问题解决 项目中有以下设置JDK版本…

介绍一下ReentrantLock 跟 Synchronized 区别

ReentrantLock 跟 Synchronized 区别 面试回答&#xff1a; 相同点&#xff1a; synchronized 和 ReentrantLock 都是用来保护资源线程安全的。 都可以保证可见性。 synchronized 和 ReentrantLock 都拥有可重入的特点。 从基本语义和概念上说 synchronized: Java 内建的…

第7次课 栈A

课堂学习 栈&#xff08;stack&#xff09; 是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子&#xff0c;如果想取出底部的盘子&#xff0c;则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素&#xff08;如整数、字符、对象等&…

ts装饰器

TypeScript 装饰器是一种特殊类型的声明&#xff0c;能够被附加到类声明、方法、访问符、属性或参数上。它本质上是一个函数&#xff0c;会在运行时被调用&#xff0c;并且被装饰的声明信息会作为参数传递给装饰器函数。 装饰器的分类 类装饰器 类装饰器作用于类构造函数&…

【金仓数据库征文】政府项目数据库迁移:从MySQL 5.7到KingbaseES的蜕变之路

摘要&#xff1a;本文详细阐述了政府项目中将 MySQL 5.7 数据库迁移至 KingbaseES 的全过程&#xff0c;涵盖迁移前的环境评估、数据梳理和工具准备&#xff0c;迁移实战中的数据源与目标库连接配置、迁移任务详细设定、执行迁移与过程监控&#xff0c;以及迁移后的质量验证、系…

VB与Excel无缝连接实现指南

一、前期准备 引用Excel对象库&#xff1a; 在VB开发环境中&#xff0c;点击"项目"→"引用" 勾选"Microsoft Excel XX.X Object Library"&#xff08;XX.X代表版本号&#xff09; 创建Excel应用程序对象&#xff1a; vb Dim xlApp As Excel.…

【MySQL】数据库、数据表的基本操作

个人主页&#xff1a;Guiat 归属专栏&#xff1a;MySQL 文章目录 1. MySQL基础命令1.1 连接MySQL1.2 基本命令概览 2. 数据库操作2.1 创建数据库2.2 查看数据库2.3 选择数据库2.4 修改数据库2.5 删除数据库2.6 数据库备份与恢复 3. 表操作基础3.1 创建表3.2 查看表信息3.3 创建…

cursor sign in 网页登录成功,sursor软件里一直登陆不成功没有登陆信息

今天在使用cursor登陆无法登陆&#xff0c;点击sigin in打开网址登陆成功后&#xff0c;软件里一直无法显示登陆信息。 点击sigin in 在网址登陆成功后 解决办法&#xff1a; 方法1.设置windows默认应用为chrome. 办法2: 删除代理 cursor上ctrl, 打开设置&#xff0c;找到…

深入理解卷积神经网络的输入层:数据的起点与预处理核心

内容摘要 本文围绕卷积神经网络输入层展开&#xff0c;详细介绍其在网络中的重要作用&#xff0c;包括接收不同领域数据的形式及传递数据的过程。深入解读数据预处理的关键操作&#xff0c;如去均值、归一化和PCA/白化。助力读者透彻理解输入层&#xff0c;为构建高效卷积神经…

解决 MySQL 数据库无法远程连接的问题

在使用 MySQL 数据库时&#xff0c;遇到这样的问题&#xff1a; 本地可以连接 MySQL&#xff0c;但远程机器连接时&#xff0c;总是报错 Host ... is not allowed to connect to this MySQL server。 这通常是因为 MySQL 的用户权限或配置限制了远程访问。 1. 登录 MySQL 数据…

MCP认证全解析:从零到微软认证专家

MCP认证全解析&#xff1a;从零到微软认证专家 什么是MCP认证&#xff1f; Microsoft Certified Professional&#xff08;MCP&#xff09;是由微软官方颁发的技术认证&#xff0c;旨在验证IT从业者在微软技术栈&#xff08;如Azure、Windows Server、SQL Server等&#xff0…

驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域更新

一&#xff1a;概述 前面在介绍了显示模式设置&#xff08;分辨率&#xff0c;刷新率&#xff09;之后&#xff0c;本文继续分析下&#xff0c;显示区域的绘制&#xff0c;详细看看虚拟机的画面是如何由QXL显卡绘制出来的。 二&#xff1a;相关数据结构介绍 struct qxl_moni…

远程调用负载均衡LoadBalancer

1. 什么是负载均衡 负载均衡就是将负载&#xff08;工作任务&#xff0c;访问请求&#xff09;进行分摊到多个操作单元&#xff08;服务器,组件&#xff09;上进行执行。 根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。 服务端负载均衡&#xff1a;指的…

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读前言if name ‘main’parse_opt函数main函数run函数不同命令参数的推理结果常规推理命令推理命令(新增…