一本通 3 2 練習 7 道路和航線

2022-04-28 17:48:06 字數 2331 閱讀 9631

又水又坑的一題,

spfa裸題,但要加deque優化,用堆都不行。。

題目描述

原題來自:usaco 2011 jan. gold

farmer john 正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到 ttt 個城鎮 ,編號為 111 到 ttt。這些城鎮之間通過 rrr 條道路(編號為 111 到 rrr)和 ppp 條航線(編號為 111 到 ppp)連線。每條道路 iii 或者航線 iii 連線城鎮 aia_iai​到 bib_ibi​,花費為 cic_ici​。

對於道路,0≤ci≤1040 \le c_i \le 10^40≤ci​≤104,然而航線的花費很神奇,花費 cic_ici​可能是負數。道路是雙向的,可以從 aia_iai​到 bib_ibi​,也可以從 bib_ibi​到 aia_iai​,花費都是 cic_ici​。然而航線與之不同,只可以從 aia_iai​到 bib_ibi​。

事實上,由於最近恐怖主義太囂張,為了社會和諧,出台了一些政策保證:如果有一條航線可以從 aia_iai​到 bib_ibi​,那麼保證不可能通過一些道路和航線從 bib_ibi​回到 aia_iai​。由於 fj 的奶牛世界公認十分給力,他需要運送奶牛到每乙個城鎮。他想找到從傳送中心城鎮 sss 把奶牛送到每個城鎮的最便宜的方案,或者知道這是不可能的。

輸入格式

第一行為四個空格隔開的整數:t,r,p,st, r, p,st,r,p,s;

第二到第 r+1r+1r+1 行:三個空格隔開的整數(表示一條道路):ai,bia_i, b_iai​,bi​和 cic_ici​;

第 r+2r+2r+2 到 r+p+1r+p+1r+p+1 行:三個空格隔開的整數(表示一條航線):ai,bia_i, b_iai​,bi​和 cic_ici​。

輸出格式

輸出 ttt 行,第 iii 行表示到達城鎮 iii 的最小花費,如果不存在輸出no path

樣例樣例輸入

6 3 3 4 

1 2 5

3 4 5

5 6 10

3 5 -100

4 6 -100

1 3 -10

樣例輸出

no path 

no path

5 0

-95

-100

樣例說明

一共六個城鎮。在 111 和 222,333 和 444,555 和 666 之間有道路,花費分別是 5,5,105,5,105,5,10。同時有三條航線:3→53\to 53→5,4→64\to 64→6 和 1→31\to 31→3,花費分別是 −100,−100,−10-100,-100,-10−100,−100,−10。fj 的中心城鎮在城鎮 444。fj 的奶牛從 444 號城鎮開始,可以通過道路到達 333 號城鎮。然後他們會通過航線達到 555 和 666 號城鎮。但是不可能到達 111 和 222 號城鎮。

資料範圍與提示

對於全部資料,1≤t≤2.5×104,1≤r,p≤5×104,1≤ai,bi,s≤t1\le t\le 2.5\times 10^4,1\le r,p\le 5\times 10^4,1\le a_i,b_i,s\le t1≤t≤2.5×104,1≤r,p≤5×104,1≤ai​,bi​,s≤t。保證對於所有道路,0≤ci≤1040 \le c_i \le 10^40≤ci​≤104,對於所有航線,−104≤ci≤104-10^4 \le c_i \le 10^4−104≤ci​≤104。

1 #include2

using

namespace

std;

3const

int maxm =1e5;

4const

int maxn =5e4;56

struct

edgee[maxm<<1];9

10int

head[maxn],n,m1,m2,s,dis[maxn],vis[maxn],size;

1112

void adde(int u,int v,int

w)15

16void

spfa()28}

29}30}

31}3233

intmain()

39for(int i=1;i<=m2;i++)

42 memset(dis,0x3f,sizeof

(dis));

43spfa();

44for(int i=1;i<=n;i++)

48return0;

49 }

view code

一本通的遞迴練習

給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。char a 10 b 10 將a字串的各種排列依次放到b字串中 int vis 10 n 用vis i 來代表a i 字母有沒有被訪問過 void...

一本通 2 1 練習 7 門票

oj 10041 rm loj 10041 loj 10 041 這道題有三種解法,一本通的編排為我們提示了其中唯一一種會被卡的解法 mmp 1.雜湊表 large textbf 1.雜湊表 正是萬惡的一本通給我們指引的一條道路 非常的暴力,往雜湊表裡不斷加數即可,每算出一項就查一次表。時間複雜度約...

一本通 1 2 練習 2 擴散

題目link 這道題雖說是二分裡的,但是我沒用二分的做法。首先我的想法是直接找到任意兩點之間的最大距離即可,但是後來寫完交上去發現不對,之後分析了一下發現兩個點成為同乙個連通塊是可以通過另外乙個連通塊更新距離的,因為另乙個連通塊也可以擴散,有點類似 floyd 更新完之後可以直接像第乙個思路一樣算了...