本題開o2優化,請注意常數
博艾市除了有海底高鐵連線中國大陸、台灣與日本,市區裡也有很成熟的軌道交通系統。我們可以認為博艾地鐵系統是乙個無向連通圖。博艾有n個地鐵站,同時有m小段地鐵連線兩個不同的站。
地鐵計價方式很簡單。從a站到b站,每經過一小段鐵路(連線直接相鄰的兩個點的一條邊),就要收取1博艾元。也就是說,從a站到b站,選擇的路徑不一樣,要價也會不同。
我們認為凡華中學在1號地鐵站。學生們通過地鐵通勤,他們當然知道選擇最短路來坐車的話,票價最便宜。
然而博艾地鐵公司經營不善,一直虧損,於是他們打算提價。提價一次就是將一小段鐵路原來收費1元改收2元。同一小段的鐵路不會多次提價。他們打算提價q次。
學生們知道,如果他們到學校的一條最短路徑中的一小段提價了,可以改變路徑,使總票價不變。然而隨著一條一條的鐵路被提價,當居住在某個站附近的學生發現,提價後,沒有任何一種方案可以從家到學校的費用和初始費用相等時,就會不滿。
現在地鐵公司希望知道,對於每一次漲價,有多少個站,學生會因為漲價而不滿呢?
輸入格式:
第一行為三個整數n,m,q。
接下來m行,每行2個整數ai,bi,表示第i條鐵路連線的兩個站。i表示鐵路編號。
接下來q行,每行一行整數rj,表示每次漲價的鐵路編號。
輸出格式:
q行。每行乙個整數表示不滿的車站數量。
輸入樣例#1:複製
5 6 5
1 21 3
4 23 2
2 55 352
413輸出樣例#1:複製02
244【樣例解釋】
次數 車站2 車站3 車站4 車站5
初始 1 1 2 2
1 1 1 2 2
2 1 2 2 3
3 1 2 2 3
4 2 2 3 3
5 2 2 4 3
【資料範圍】
對於20%的資料 n≤100, q≤30
對於40%的資料 q≤30
對於70%的資料 正確的輸出結果中,不會有超過50種不一樣的整數(資料範圍劇透解法系列)
對於100%的資料 n≤100000, q≤m≤200000
把每次拆邊轉化成每次加邊就會好很多
先把變都存下來,一遍bfs找出每個點的最短路,然後拆掉有標記的邊bfs找到最短路不變的點
依次加邊,每次遍歷的點當且僅當這個點當前不具有最短路且它的鄰居突然具有了最短路
這樣時間複雜度是\(o(n)\)的
#include#include#include#include#define m 500010
using namespace std;
queue q;
int i,m,n,j,k,a[m],ver[m],nex[m],head[m],cnt,b[m],bl[m],c[m],f[m],h[m],ans[m],p;
void add(int x,int y)
void bfs()
}}void bfs1()
}}void dfs(int now)
}int main()
bfs();
for(i=1;i<=p;i++)
memset(bl,0,sizeof(bl)); k=1; bfs1();
for(i=p;i>=1;i--)
for(i=1;i<=p;i++) printf("%d\n", ans[i]);
}
洛谷 P1710 地鐵漲價
本題開o2優化,請注意常數 博艾市除了有海底高鐵連線中國大陸 台灣與日本,市區裡也有很成熟的軌道交通系統。我們可以認為博艾地鐵系統是乙個無向連通圖。博艾有n個地鐵站,同時有m小段地鐵連線兩個不同的站。地鐵計價方式很簡單。從a站到b站,每經過一小段鐵路 連線直接相鄰的兩個點的一條邊 就要收取1博艾元。...
洛谷 P1710 地鐵漲價 (dfs bfs)
博艾市除了有海底高鐵連線中國大陸 台灣與日本,市區裡也有很成熟的軌道交通系統。我們可以認為博艾地鐵系統是乙個無向連通圖。博艾有n個地鐵站,同時有m小段地鐵連線兩個不同的站。地鐵計價方式很簡單。從a站到b站,每經過一小段鐵路 連線直接相鄰的兩個點的一條邊 就要收取1博艾元。也就是說,從a站到b站,選擇...
luogu P1710 地鐵漲價
嘟嘟嘟 一道最短路好題。首先明確一點,把一條邊的邊權變成2,等於刪去這條邊。因為變成2後最短路肯定不會經過這條邊,就相當於刪去這條邊了。所以題目變成了依次刪去q條邊,求每一次刪完邊後有幾個點的最短路變大了。多做做題就會有這麼個思維 刪邊不好辦,然而逆向加邊方便多了。所以30做法就是離線逆向加邊,跑q...