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 21 2 2
1 3 2
3 4 4
3 2 1
2 4 3
1 5
輸出樣例#1:
66
100%的資料滿足2資料已加強by vfleaking
1 #include2using
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 ...