洛谷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 1?2N 的傳送門所組成的網絡中。每個傳送門連接兩個不同的結點 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 1cv?103

思路

首先先翻譯一下這冗長的題目:

給定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.pswp.cn/web/79243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79243.shtml
英文地址,請注明出處:http://en.pswp.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函數不同命令參數的推理結果常規推理命令推理命令(新增…