HNOI2014 道路堵塞

2022-03-14 18:03:22 字數 1762 閱讀 7556

a國有n座城市,依次標為1到n。同時,在這n座城市間有m條單向道路,每條道路的長度是乙個正整數。現在,a國交通部指定了一條從城市1到城市n的路徑,並且保證這條路徑的長度是所有從城市1到城市n的路徑中最短的。不幸的是,因為從城市1到城市n旅行的人越來越多,這條由交通部指定的路徑經常發生堵塞。現在a國想知道,這條路徑中的任意一條道路無法通行時,由城市1到n的最短路徑長度是多少。

輸入格式:

輸入檔案第一行是三個用空格分開的正整數n、m和l,分別表示城市數目、單向道路數目和交通部指定的最短路徑包含多少條道路。按下來m行,每行三個用空格分開的整數a、b和c,表示存在一條由城市a到城市b的長度為c的單向道路。這m行的行號也是對應道路的編號,即其中第1行對應的道路編號為1,第2行對應的道路編號為2,...,第m行對應的道路編號為m。最後一行為l個用空格分開的整數sp(1)...,,sp(l),依次表示從城市1到城市n的由交通部指定的最短路徑上的道路的編號。

輸出格式:

輸出檔案包含l行,每行為乙個整數,第i行(i=1,2...,,l)的整數表示刪去編號為sp(i)的道路後從城市1到城市n的最短路徑長度。如果去掉後沒有從城市1到城市n的路徑,則輸出一1。

輸入樣例#1: 

4 5 2

1 2 2

1 3 2

3 4 4

3 2 1

2 4 3

1 5

輸出樣例#1: 

6

6

100%的資料滿足2資料已加強by vfleaking

1 #include2

using

namespace

std;

3const

int gg=1e5+29

;4 inline void read(int &x)

10while

(isdigit(c))

14 x*=f;15}

16struct

nodea[gg<<1

];21

struct

noded

26};

27int

cnt;

28int

head[gg],dis[gg],sum[gg],pos[gg],to[gg],fro[gg],ro[gg];

29bool vis[gg],ban[gg<<1

];30

intn,m,l;

31 priority_queues;

32 dequeq;

33 inline void add(int i,int j,int

w)34

40 inline void spfa(int

qwq)

41);

59else

6068

else

6972}73

}74}75

}76}77

intmain()

7889 fro[1]=1

;90 pos[1]=1;91

for(register int i=1;i<=l;i++)

9298

for(register int i=l;i;i--)

99 sum[i]=sum[i+1]+a[ro[i]].w;

100 spfa(1

) ;

101for(register int i=1;i<=l;i++)

102112

return0;

113 }

HNOI2014 道路堵塞

a國有n座城市,依次標為1到n。同時,在這n座城市間有m條單向道路,每條道路的長度是乙個正整數。現在,a國交通部指定了一條從城市1到城市n的路徑,並且保證這條路徑的長度是所有從城市1到城市n的路徑中最短的。不幸的是,因為從城市1到城市n旅行的人越來越多,這條由交通部指定的路徑經常發生堵塞。現在a國想...

HNOI2014 道路堵塞 最短路,線段樹

對不起對不起,辣雞蒟蒻又來用核彈打蚊子了 完全ignore了題目給出的最短路,手工搞出乙個最短路,發現對答案沒什麼影響 所以乾脆轉化為經典問題 每次詢問刪掉一條邊後的最短路 如果刪掉的是非最短路邊,那麼顯然毫無影響 如果刪掉的是最短路邊,那麼我們倒過來,考慮這個時候每條非最短路邊的貢獻。對於一條非最...

bzoj3575 Hnoi2014 道路堵塞

一開始看錯題啦!某一條邊不走的最短路相當於1 沿最短路 x y 沿最短路 n,於是 定義t,表示從起點到最短路上序號r有一條長度為l的非最短路。然後用堆維護即可。慎用memset。tle。include include include include include define n 100005 ...