P1967 [NOIP 2013 提高組] 貨車運

題目背景

NOIP2013 提高組 D1T3

題目描述

A 國有 n n n 座城市,編號從 1 1 1 n n n,城市之間有 m m m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。

現在有 q q q 輛貨車在運輸貨物, 司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。

輸入格式

第一行有兩個用一個空格隔開的整數 $ n,m$,表示 A 國有 $ n$ 座城市和 m m m 條道路。

接下來 m m m 行每行三個整數 x , y , z x, y, z x,y,z,每兩個整數之間用一個空格隔開,表示從 $x $ 號城市到 $ y $ 號城市有一條限重為 z z z 的道路。
注意: x ≠ y x \neq y x=y,兩座城市之間可能有多條道路 。

接下來一行有一個整數 q q q,表示有 q q q 輛貨車需要運貨。

接下來 q q q 行,每行兩個整數 x , y x,y x,y,之間用一個空格隔開,表示一輛貨車需要從 x x x 城市運輸貨物到 y y y 城市,保證 x ≠ y x \neq y x=y

輸出格式

共有 q q q 行,每行一個整數,表示對于每一輛貨車,它的最大載重是多少。
如果貨車不能到達目的地,輸出 ? 1 -1 ?1

輸入輸出樣例 #1

輸入 #1

4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3

輸出 #1

3
-1
3

說明/提示

對于 30 % 30\% 30% 的數據, 1 ≤ n < 1000 1 \le n < 1000 1n<1000 1 ≤ m < 10 , 000 1 \le m < 10,000 1m<10,000 1 ≤ q < 1000 1\le q< 1000 1q<1000

對于 60 % 60\% 60% 的數據, 1 ≤ n < 1000 1 \le n < 1000 1n<1000 1 ≤ m < 5 × 1 0 4 1 \le m < 5\times 10^4 1m<5×104 1 ≤ q < 1000 1 \le q< 1000 1q<1000

對于 100 % 100\% 100% 的數據, 1 ≤ n < 1 0 4 1 \le n < 10^4 1n<104 1 ≤ m < 5 × 1 0 4 1 \le m < 5\times 10^4 1m<5×104,$1 \le q< 3\times 10^4 $, 0 ≤ z ≤ 1 0 5 0 \le z \le 10^5 0z105

算法思路

  • 問題轉換

  • 設特殊點集合為 S S S,目標函數為: f ( v ) = ∑ s ∈ S dist ( s , v ) f(v) = \sum_{s \in S} \text{dist}(s, v) f(v)=sS?dist(s,v)

  • 其中 dist ( s , v ) \text{dist}(s, v) dist(s,v) 表示節點 s s s v v v 的最短路徑距離。需要找到 KaTeX parse error: Expected group after '^' at position 2: v^? 使得: v = arg ? min ? 1 ≤ v ≤ a f ( v ) v^ = \arg\min_{1 \leq v \leq a} f(v) v=arg1vamin?f(v)

  • 核心算法

  • 使用 SPFA 算法(Shortest Path Faster Algorithm)計算每個特殊點到所有節點的最短路徑。
    維護全局數組 dp1[] 累加所有特殊點到各節點的距離和: dp1 [ v ] = ∑ s ∈ S dist ( s , v ) \text{dp1}[v] = \sum_{s \in S} \text{dist}(s, v) dp1[v]=sS?dist(s,v)

  • 最終遍歷 dp1[] 取最小值: ans = min ? v ∈ [ 1 , a ] dp1 [ v ] \text{ans} = \min_{v \in [1,a]} \text{dp1}[v] ans=v[1,a]min?dp1[v]

關鍵點說明

  • SPFA 優化

  • 使用隊列避免重復松弛,時間復雜度平均 O ( k ? m ) O(k \cdot m) O(k?m) k k k 為常數)。
    初始化距離為 0x7fffffff(32 位整數最大值),但實際用 long long 存儲。
    距離累加

  • dp1[i] += dp[i] 將每個特殊點的最短路徑累加到全局數組。
    最終 dp1[i] 表示所有特殊點到節點 i i i 的距離和。
    無向圖處理


add(x, y, c);  // 添加雙向邊
add(y, x, c);

復雜度分析

  • 時間復雜度: O ( n ? k ? m ) O(n \cdot k \cdot m) O(n?k?m)
  • 其中 n n n 為特殊點數量, m m m 為邊數, k k k 是 SPFA 的平均松弛次數。
  • 空間復雜度: O ( a + m ) O(a + m) O(a+m)
  • 鄰接表存儲圖,數組大小與節點數 a a a 成正比。

適用場景

  • 適合稀疏圖( m ? a 2 m \ll a^2 m?a2)且特殊點數量 n n n 較小的場景。
  • n n n a a a 過大( > 1 0 4 >10^4 >104),可改用 Dijkstra 堆優化(需非負權邊)。
  • 注意:當圖存在負權邊時 SPFA 仍有效,但需確保無負權環(題目未說明時通常假設無環)。

詳細代碼

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int dp[N],dp1[N],n,m,a,b,x,y,c,h[N],w[N],to[N],ne[N],tot,num[N];
bool vis[N];
void add(int a,int b,int c)
{tot++;ne[tot]=h[a];h[a]=tot;to[tot]=b;w[tot]=c;
}
void spfa(int x)
{fill(dp+1,dp+1+a,0x7fffffff);fill(vis+1,vis+1+a,0);dp[x]=0;queue<int>q;q.push(x);vis[x]=1;while(!q.empty()){int j=q.front();q.pop();vis[j]=0;for(int i=h[j];i;i=ne[i]){int jj=to[i];if(dp[jj]>dp[j]+w[i]){dp[jj]=dp[j]+w[i];if(!vis[jj]){vis[jj]=1;q.push(jj);}}}}
//	cout<<dp[8]<<'\n';for(int i=1;i<=a;i++)dp1[i]+=dp[i];
}
signed main()
{ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);memset(dp1,0,sizeof(dp1));cin>>n>>a>>m;for(int i=1;i<=n;i++)cin>>num[i];for(int i=1;i<=m;i++){cin>>x>>y>>c;add(x,y,c);add(y,x,c);}for(int i=1;i<=n;i++)spfa(num[i]);
//	for(int i=1;i<=n;i++)
//		cout<<num[i]<<'\n';
//	for(int i=1;i<=a;i++)
//		cout<<dp[i]<<'\n';int ans=1e12;int sf=0;for(int i=1;i<=a;i++){if(ans>dp1[i])sf=i;ans=min(ans,dp1[i]);}
//	cout<<b;
//	cout<<ans;
//	cout<<sf<<'\n';cout<<ans;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86893.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86893.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【軟考高項論文】論信息系統項目的溝通管理

摘要 在信息系統項目的實施進程中&#xff0c;溝通管理的重要性不言而喻。有效的溝通不僅能保證項目信息準確傳遞&#xff0c;還能推動團隊協作&#xff0c;提高項目整體效率。本文結合 2024 年 6 月我所參與的信息系統項目&#xff0c;圍繞項目溝通管理的過程及項目干系人管理…

浪潮和曙光服務器的ipmi配置教程

配置浪潮SA5212M5服務器 1、啟動服務器按DEL按鍵進入服務器bios 2、選擇Server Mgmt菜單中的BMC Network Configuration配置項回車。 3、BMC Network Configuration配置項中的Get BMC Dedicated Parameters選擇Manual&#xff08;手動配置&#xff09; 4、BMC Network Configu…

Golang 標準庫errors用法

Go語言的標準庫中的errors包提供了一些用于創建和操作錯誤的基本功能。下面是對該包的詳細用法說明。 基本用法 創建錯誤 使用errors.New函數創建一個新的錯誤對象。errors.New接受一個字符串參數作為錯誤信息&#xff0c;并返回一個實現了error接口的對象。 package mainimpo…

搭建自己的WEB應用防火墻

搭建自己的WEB應用防火墻 之前給客戶搭建的網站服務近期頻繁遭受惡意掃描、暴力破解攻擊&#xff0c;日志里記錄著各種奇葩的請求地址&#xff0c;導致Tomcat線程資源耗盡&#xff0c;最終nginx報504&#xff08;網關超時&#xff09;&#xff0c;在服務器上curl本地請求依然卡…

MySQL:CRUD操作

目錄 XML模版一、結果返回集二、查詢三、查詢詳情四、新增4.1 不含逗號4.1 含逗號 五、修改5.1 不含逗號5.2 含逗號 六、刪除 XML模版 xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3…

智慧園區綜合管理平臺:提升園區運營效能的核心利器

在數字化浪潮席卷各個領域的當下&#xff0c;智慧園區的建設成為了推動產業升級、提升管理效率和服務質量的關鍵舉措。而綜合管理平臺作為智慧園區的 “大腦”&#xff0c;整合了園區運營的各類功能&#xff0c;為園區管理者和企業提供了全方位的支持。本文將基于一份智慧園區功…

碰一碰發視頻源碼搭建,支持OEM

在數字化生活日益普及的今天&#xff0c;便捷的信息傳輸方式成為用戶的迫切需求。“碰一碰發視頻” 功能憑借其新穎的交互體驗和高效的數據傳輸特性&#xff0c;在社交分享、文件傳輸等場景中備受青睞。本文將深入探討碰一碰發視頻源碼搭建的定制化開發流程&#xff0c;涵蓋核心…

Walrus為數據存儲帶來可編程性

要點總結 Walrus 是下一代去中心化存儲協議&#xff0c;旨在突破傳統中心化云存儲的局限&#xff0c;如高昂成本、單點故障、審查和隱私風險等&#xff0c;同時相較于其他去中心化存儲系統也做出了諸多創新&#xff0c;尤其是在可編程性與性能上的提升。“blob” 即 Binary La…

React:利用計算屬性名特點更新表單值

需求&#xff1a;三個input框&#xff0c;在input框輸入時候&#xff0c;獲取最新值&#xff0c;進行數據更新 思路&#xff1a;name屬性的變量設置的和表單的變量一樣&#xff0c;方便通過name屬性更新值 function TenantManage() {const [formData, setFormData] useState…

【軟考高項論文】論信息系統項目的范圍管理

摘要 在信息系統項目管理里&#xff0c;范圍管理極為關鍵。有效的范圍管理可保障項目按時、按質、按量完成&#xff0c;避免變更帶來的混亂與成本超支。本文結合作者參與的一個 2024 年 3 月啟動的信息系統項目&#xff0c;詳細闡述項目范圍管理的過程&#xff0c;包括范圍規劃…

蓋雅工場 2025 香港 SAP NOW 大會深度解析:AI 重構亞太勞動力管理數字化生態

一、前沿技術亮相&#xff1a;AI 驅動人力資源數字化轉型全景展示 在 6 月 13 日舉辦的 2025 香港 SAP NOW 大會上&#xff0c;亞太勞動力管理領軍企業蓋雅工場&#xff08;GaiaWorks&#xff09;以「AI 勞動力管理」為核心&#xff0c;通過主題演講與沉浸式展臺演示&#xf…

Latent Diffusion中VAE損失函數源碼解讀及對損失函數的理解

最近因為工作需求&#xff0c;接觸了Latent Diffusion中VAE訓練的相關代碼&#xff0c;其中損失函數是由名為LPIPSWithDiscriminator的類進行計算的&#xff0c;包括像素級別的重建損失&#xff08;rec_loss&#xff09;、感知損失&#xff08;p_loss&#xff09;和基于判別器&…

MIT 6.824學習心得(1) 淺談分布式系統概論與MapReduce

一個月前機緣巧合&#xff0c;有朋友向我推薦了麻省理工學院非常著名的分布式系統課程MIT 6.824&#xff0c;是由世界五大黑客之一&#xff0c;蠕蟲病毒之父Robert Morris教授進行授課。由于我自己也在做基于分布式微服務架構的業務項目&#xff0c;所以對構建分布式系統這個課…

PCL點云庫入門(第21講)——PCL庫點云特征之RSD特征描述Radius-based Surface Descriptor(RSD)

一、算法原理 RSD: Radius-based Surface Descriptor由 Marton Zsolt et al. 于 2010 年提出&#xff0c;主要用于 點云中物體的幾何形狀識別&#xff08;如球形、柱面、平面等&#xff09;&#xff0c;廣泛用于機器人抓取、點云分割和物體識別等任務中。 1.1、RSD 特征的核心…

zookeeper Curator(4):分布式鎖

文章目錄 分布式鎖分布式鎖的實現zookeeper 分布式鎖原理Curator 實現分布式鎖API1. InterProcessMutex&#xff08;分布式可重入互斥鎖&#xff09;2. InterProcessSemaphoreMutex&#xff08;分布式非可重入互斥鎖&#xff09;3. InterProcessReadWriteLock&#xff08;分布式…

設置方法區內存的大小

方法區內存配置 方法區&#xff08;Method Area&#xff09;是JVM內存模型的一部分&#xff0c;用于存儲類信息、常量、靜態變量等數據。在HotSpot虛擬機中&#xff0c;方法區的具體實現為永久代&#xff08;PermGen&#xff09;或元空間&#xff08;Metaspace&#xff09;&am…

用Flink打造實時數倉:生產環境中的“坑”與“解藥”

目錄 一、實時數倉的“野心”與“現實” 二、數據采集與接入:別讓“源頭”卡脖子 2.1 問題1:Kafka數據亂序與延遲 2.2 問題2:MySQL CDC數據同步異常 三、數據處理與計算:別讓“算力”成瓶頸 3.1 問題3:多表Join性能低下 3.2 問題4:窗口計算觸發延遲 四、狀態管理與…

linux 下 Doris 單點部署

目錄 1. Doris 下載 2. 環境準備 2.1 Linux 操作系統版本需求 2.2 部署依賴 3. Doris 部署 3.1 修改系統配置 3.1.1 修改系統句柄數 3.1.2 關閉swap分區 3.1.3 修改最大內存映射區域數量 3.2 開放端口 3.3 fe 部署 3.4 be 部署 3.5 be添加到Doris集群 4 驗證 4.…

mysql 小版本升級實戰分享

環境說明 當前版本:5.6.51 升級目標版本 mysql 5.7.41 服務啟停通過systemd管理 升級準備&#xff1a; 環境檢查 首先查看當前MySQL的版本信息&#xff0c;執行命令mysql -V&#xff0c;如圖&#xff1a; 備份數據 備份所有數據庫&#xff1a; 當數據量不是特別大的時候…

Python Ai語音識別教程

語音識別是將人類語音轉換為文本的技術&#xff0c;在現代應用中非常有用。本教程將介紹如何使用Python實現基本的AI語音識別功能。 一、文字轉語音 #文字轉語音 #安裝第三方庫 pip install pyttsx3 #導包 &#xff1a; import pyttsx3import pyttsx3#創建語音引擎 a1 pytts…