【dij算法/最短路/分層圖】P4568 [JLOI2011] 飛行路線

題目描述

Alice 和 Bob 現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在 nnn 個城市設有業務,設這些城市分別標記為 000n?1n-1n?1,一共有 mmm 種航線,每種航線連接兩個城市,并且航線有一定的價格。

Alice 和 Bob 現在要從一個城市沿著航線到達另一個城市,途中可以進行轉機。航空公司對他們這次旅行也推出優惠,他們可以免費在最多 kkk 種航線上搭乘飛機。那么 Alice 和 Bob 這次出行最少花費多少?

輸入格式

第一行三個整數 n,m,kn,m,kn,m,k,分別表示城市數,航線數和免費乘坐次數。

接下來一行兩個整數 s,ts,ts,t,分別表示他們出行的起點城市編號和終點城市編號。

接下來 mmm 行,每行三個整數 a,b,ca,b,ca,b,c,表示存在一種航線,能從城市 aaa 到達城市 bbb,或從城市 bbb 到達城市 aaa,價格為 ccc

輸出格式

輸出一行一個整數,為最少花費。

數據規模與約定

對于 30%30\%30% 的數據,2≤n≤502 \le n \le 502n501≤m≤3001 \le m \le 3001m300k=0k=0k=0

對于 50%50\%50% 的數據,2≤n≤6002 \le n \le 6002n6001≤m≤6×1031 \le m \le 6\times10^31m6×1030≤k≤10 \le k \le 10k1

對于 100%100\%100% 的數據,2≤n≤1042 \le n \le 10^42n1041≤m≤5×1041 \le m \le 5\times 10^41m5×1040≤k≤100 \le k \le 100k100≤s,t,a,b<n0\le s,t,a,b < n0s,t,a,b<na≠ba\ne ba=b0≤c≤1030\le c\le 10^30c103

另外存在一組 hack 數據。

思路

考慮dij算法,對于滿足兩點之間有路徑連接的點 aaa 到點 bbb,有兩種可能的轉移方法:

  • ansb←min?(ansb,ansa+dis(a,b))ans_b \gets \min(ans_b,ans_a+dis(a,b))ansb?min(ansb?,ansa?+dis(a,b)),其中 dis(a,b)dis(a,b)dis(a,b) 表示 (a,b)(a,b)(a,b) 間路徑距離。
  • ansb←min?(ansb,ansa)ans_b \gets \min(ans_b,ans_a)ansb?min(ansb?,ansa?),當到 aaa 點時免費飛行次數還沒被用完的時候可以這樣轉移。

為了記錄到點 aaa 運用 ccc 次免費飛行的最小花費,我們在 ansansans 上引入新變量,記作 ansa,cans_{a,c}ansa,c?,表示從出發點飛到 aaa 點的最小花費。可以證明,對于 c1>c2c_1>c_2c1?>c2?,ansa,c1≤ansa,c2ans_{a,c_1} \leq ans_{a,c_2}ansa,c1??ansa,c2??。最后搜到 anst,kans_{t,k}anst,k? 停止就可以。

當然也可以采取分層圖的方法,也就是將圖分成 k+1k + 1k+1 份,相鄰兩個圖之間邊權為 000,按照原有方法運行 dij 算法也可以。

代碼

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int s,t;
int head[10005],nex[100005],to[100005],w[100005],cnt = 0; 
int ans[10005][15];
inline void add(int x,int y,int z) {nex[++cnt] = head[x];head[x] = cnt;to[cnt] = y;w[cnt] = z;
}
struct node {int id,w,k;friend bool operator <(node x,node y) {if(x.w != y.w) return x.w > y.w;if(x.k != y.k) return x.k > y.k;return x.id > y.id;}
};
priority_queue<node>dij;
inline void ps(int id,int w,int k_1) {node p;p.id = id;p.w = w;p.k = k_1;dij.push(p);for(int i = k_1;i <= k and ans[id][i] > w;i++) {ans[id][i] = min(ans[id][i],w);}
}
signed main() {scanf("%lld %lld %lld",&n,&m,&k);scanf("%lld %lld",&s,&t);for(int i = 0;i < n;i++) {if(i == s) continue;for(int j = 0;j <= k;j++) {ans[i][j] = 100000000000;}}for(int i = 1;i <= m;i++) {int x,y,z;scanf("%lld %lld %lld",&x,&y,&z);add(x,y,z),add(y,x,z);}ps(s,0,0);while(!dij.empty()) {node p = dij.top();dij.pop();if(ans[p.id][p.k] < p.w) continue;//printf("______%lld %lld %lld\n",p.id,p.w,p.k);if(p.id == t and (p.k == k or p.w == 0)) {printf("%lld\n",p.w);return 0;}for(int i = head[p.id];i;i = nex[i]) {if(p.k < k) {if(ans[to[i]][p.k + 1] > p.w) {ps(to[i],p.w,p.k + 1);		}} if(ans[to[i]][p.k] + w[i] > p.w) {ps(to[i],p.w + w[i],p.k);		}}}return 0;
}

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

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

相關文章

告別傳統,CVPR三論文用GNN動態圖重塑視覺AI

本文選自gongzhonghao【圖靈學術SCI論文輔導】關注我們&#xff0c;掌握更多頂會頂刊發文資訊今天&#xff0c;為大家推薦一個極具前沿價值與實用潛力的研究方向&#xff1a;圖神經網絡&#xff08;GNN&#xff09;。作為深度學習領域的新興力量&#xff0c;圖神經網絡在近年頂…

HTTP/HTTPS代理,支持RSA和SM2算法

在日常工作和學習中&#xff0c;我們經常遇到HTTP和HTTPS的相關問題&#xff0c;要解決這些問題&#xff0c;有時就需要搭建各種實驗環境&#xff0c;重現業務場景&#xff0c;比如&#xff1a; 將HTTP轉為HTTPS。本地只能發送HTTP請求&#xff0c;但是遠程服務器卻只能接收HT…

如何提高AI寫作論文的查重率?推薦七個AI寫作論文工具

隨著AI技術在學術領域的廣泛應用&#xff0c;越來越多的學生和研究人員開始使用AI寫作工具來提高寫作效率&#xff0c;幫助完成畢業論文、科研論文等。然而&#xff0c;AI生成的內容是否會提高論文的查重率&#xff1f;是否能有效避免重復和提高通過率&#xff1f;這些問題成為…

跨平臺、低延遲、可嵌入:實時音視頻技術在 AI 控制系統中的進化之路

引言&#xff1a;面向未來的實時音視頻基座 在萬物互聯與智能化加速落地的時代&#xff0c;實時音視頻技術早已不再只是社交娛樂的附屬功能&#xff0c;而是智慧城市、應急指揮、遠程操控、工業智造、教育培訓、安防監控等系統的“神經中樞”。一條高性能、可控、低延遲的視頻…

Spring WebFlux開發指導

Spring WebFlux是一個響應式的web服務器端應用開發框架&#xff0c;響應式是指&#xff0c;當前端組件的狀態發生變化&#xff0c;則生成事件通知&#xff0c;根據需求可異步或者同步地向服務器端接口發送請求&#xff0c;當服務器端網絡IO組件的狀態發生變化&#xff0c;則生成…

09-docker鏡像手動制作

文章目錄一.手動制作單服務的nginx鏡像1.啟動一個基礎容器&#xff0c;此處我使用的是centos7鏡像。2.修改容器中的軟件源3.安裝nginx服務并啟動nginx服務4.修復nginx的首頁文件5.退出容器6.將退出的容器提交為鏡像7.測試鏡像的可用性二.手動制作多服務的nginx sshd鏡像1.啟用…

Android.mk教程

語法 Android.mk 的必備三行 LOCAL_PATH : $(call my-dir) # Android.mk的目錄&#xff0c;call調用函數include $(CLEAR_VARS) # 除了LOCAL_PATH清除所有LOCAL_XXXinclude $(BUILD_SHARED_LIBRARY) # BUILD_XXX, 指定構建類型 # BUILD_SHARED_LIBRARY → .so動態庫 # BUILD…

稠密檢索:基于神經嵌入的高效語義搜索范式

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1. 背景與定義 稠密檢索&#xff08;Dense Retrieval&#xff09;是一…

AI日報0807 | GPT-5或今晚1點來襲:四大版本全曝光

關注&#xff1a;未來世界2099每日分享&#xff1a;全球最新AI資訊【應用商業技術其他】服務&#xff1a;【學習Q】【資源Q】【學習資料】【行業報告】&#xff08;無限免費下載&#xff09;應用 1、訊飛星火代碼畫布震撼上線&#xff1a;動嘴就能開發&#xff0c;工作效率翻倍…

認識爬蟲 —— 正則表達式提取

本質是對字符串的處理&#xff0c;正則表達式描述的是一種字符串匹配的模式。簡而言之&#xff0c;用具備一定特征意義的表達式對字符串進行檢查&#xff0c;將符合條件的子字符串提取出來。導入模塊import re一、單字符匹配match(表達式&#xff0c;匹配對象)&#xff1a;匹配…

單鏈表專題---暴力算法美學(1)(有視頻演示)

1.1 移除鏈表元素 題目要求&#xff1a;給你一個鏈表的頭節點head 和一個整數val,請你刪除鏈表中所有滿足Node.val val 的節點&#xff0c;并返回新的頭節點。 思路一&#xff1a;遍歷鏈表&#xff0c;遇到val就刪除&#xff0c;pcur指向val的下一個節點&#xff0c;最后只剩…

機器學習-決策樹(DecisionTree)

0 回歸決策樹展示 import pandas as pd import numpy as np from sklearn.tree import DecisionTreeRegressor from sklearn.metrics import root_mean_squared_error, r2_score from sklearn.model_selection import GridSearchCV,KFold from sklearn.model_selection import…

【Java Web】JDBC 連接 MySQL 實現數據庫 CRUD(增刪改查)詳解

在 Java Web 開發中&#xff0c;與數據庫交互是不可避免的&#xff0c;而 JDBC&#xff08;Java Database Connectivity&#xff09; 是 Java 官方提供的標準數據庫連接接口&#xff0c;幾乎所有 Java 項目中都用過它。 本文通過一個完整示例&#xff0c;帶你從零實現 增&#…

HTTP 請求返回狀態碼和具體含義?200、400、403、404、502、503、504等

HTTP 狀態碼是服務器對客戶端請求的響應狀態標識&#xff0c;分為五大類&#xff08;以第一位數字區分&#xff09;&#xff0c;常用狀態碼如下&#xff1a; 1. 信息類&#xff08;1xx&#xff09;&#xff1a;請求已接收&#xff0c;繼續處理 100 Continue&#xff1a;服務器已…

13-netty基礎-手寫rpc-消費方生成代理-05

netty系列文章&#xff1a; 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

ThreadLocal有哪些內存泄露問題,如何避免?

每個Thread都有一個ThreadLocal.ThreadLocalMap的map&#xff0c;該map的key為ThreadLocal實例&#xff0c;它為一個弱引 用&#xff0c;我們知道弱引用有利于GC回收。當ThreadLocal的key null時&#xff0c;GC就會回收這部分空間&#xff0c;但是value卻不一 定能夠被回收&am…

從0到1學LangChain之Agent代理:解鎖大模型應用新姿勢

從0到1學LangChain之Agent代理&#xff1a;解鎖大模型應用新姿勢 本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型開發 學習視頻/籽料/面試題 都在這>>Github<< 什么是 LangChain Agent 代理 如果把大模型比作一個超級大腦&#xff0c;那么…

Spring Boot 2.6.0+ 循環依賴問題及解決方案

Spring Boot 2.6.0 循環依賴問題及解決方案 目錄 背景解決方案 1. 配置文件開啟循環依賴&#xff08;侵入性最低&#xff0c;臨時方案&#xff09;2. Lazy 延遲注入&#xff08;侵入性低&#xff0c;推薦優先嘗試&#xff09;3. 手動從容器獲取&#xff08;ApplicationContex…

本地代碼上傳Github步驟

1.注冊Github賬號 2.下載git客戶端 下載、安裝步驟可以參考網站&#xff1a;(6 封私信 / 10 條消息) 手把手教你用git上傳項目到GitHub&#xff08;圖文并茂&#xff0c;這一篇就夠了&#xff09;&#xff0c;相信你一定能成功&#xff01;&#xff01; - 知乎 3.在Github上…

5G NR 非地面網絡 (NTN) 5G、太空和統一網絡

非地面網絡 5G 和太空&#xff1a;對 NTN 測試與測量的影響NTN 基站測試與測量NTN 用戶設備的測試設備R&SSMW200A 矢量信號發生器R&SSMBV100B 矢量信號發生器總結5G 和太空&#xff1a;對 NTN 測試與測量的影響 5G 非地面網絡 (NTN) 是無線通信向全球性星基和機載通信…