本題開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 51 21 3
4 23 2
2 55 352
413
輸出樣例#1:
02244
【樣例解釋】
次數 車站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 longconst 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...