洛谷 P1710 地鐵漲價

2022-06-03 16:54:07 字數 2129 閱讀 9499

本題開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: 

022

44

【樣例解釋】

次數 車站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

其實還是蠻好做的啊(但感覺我比正解多個log 啊 2333),乙個車站x到1的最短路都增加當且僅當對於所有dis[u]+1==dis[x]且存在邊(u,x)的u,u車站到1的最短路已經增加了或者(u,x)漲價了。

然後我們就可以先預處理一遍dis,再把最短路的依賴關係這個dag建出來。現在我們要做的就相當於是乙個動態拓撲排序。

乙個點u能使v的度數減少1當且僅當 dag上有 的邊(注意這裡是無向邊),且( u到1的最短路增加 或者 原圖中(u,v)的**增加),並且這種效應只能產生一次。 因為後面的或 可能會使效應產生多次,所以我用map判了一下重。。。

#include#include#include#include#include#include#include#include#define ll long long

const int maxn=100005;

#define pb push_back

using namespace std;

vectorg[maxn];

mapban[maxn];

int q[maxn],tp,tl,ans=0;

int id[maxn],hd[maxn],n,m,q;

int to[maxn*4],ne[maxn*4],d[maxn];

bool v[maxn];

inline void bfs() }}

inline void build()

}inline void prework()

inline void work(int x)

} }}inline void solve()

printf("%d\n",ans); }}

int main()

prework();

solve();

return 0;

}

洛谷 P1710 地鐵漲價 (dfs bfs)

博艾市除了有海底高鐵連線中國大陸 台灣與日本,市區裡也有很成熟的軌道交通系統。我們可以認為博艾地鐵系統是乙個無向連通圖。博艾有n個地鐵站,同時有m小段地鐵連線兩個不同的站。地鐵計價方式很簡單。從a站到b站,每經過一小段鐵路 連線直接相鄰的兩個點的一條邊 就要收取1博艾元。也就是說,從a站到b站,選擇...

P1710 地鐵漲價

本題開o2優化,請注意常數 博艾市除了有海底高鐵連線中國大陸 台灣與日本,市區裡也有很成熟的軌道交通系統。我們可以認為博艾地鐵系統是乙個無向連通圖。博艾有n個地鐵站,同時有m小段地鐵連線兩個不同的站。地鐵計價方式很簡單。從a站到b站,每經過一小段鐵路 連線直接相鄰的兩個點的一條邊 就要收取1博艾元。...

luogu P1710 地鐵漲價

嘟嘟嘟 一道最短路好題。首先明確一點,把一條邊的邊權變成2,等於刪去這條邊。因為變成2後最短路肯定不會經過這條邊,就相當於刪去這條邊了。所以題目變成了依次刪去q條邊,求每一次刪完邊後有幾個點的最短路變大了。多做做題就會有這麼個思維 刪邊不好辦,然而逆向加邊方便多了。所以30做法就是離線逆向加邊,跑q...