見鏈結
這道題可以用拓撲排序2
。把題意簡化一下,就是:
如果你停靠了乙個站點,所有等級大於等於這個站點的站點都要停靠,反過來也就是所有起始站和終點站中間沒有停靠的站點的等級一定是小於停靠的站點。所以我們把起點到終點所有
沒停靠的站點
和所有停靠的站點
連成邊,然後拓撲排序
,輸出最後乙個(入度最大的)頂點的入度(即題目所要求的分級)。
c +
+\operatorname c++
c++ **如下3
#include
using
namespace std;
struct rec
;int n, m, a[
10010
], graph[
3010][
3010
], indegree[
10010
], head[
4000010
], ver[
4000010
], next[
4000010
], tot, ans =
1, s;
//indegree存頂點的入度,head、next、ver存圖
//用陣列模擬鍊錶
bool v[
10010];
queue q;
void
add(
int x,
int y)
intmain()
for(
int j = a[1]
; j <= a[s]
; j++)}
}for
(int i =
1; i <= n; i++)if
(indegree[i]==0
)while
(q.size()
)}} cout << ans << endl;
return0;
}
2023年noip普及組第4題 ↩︎ ↩︎
如果用鄰接矩陣存圖,陣列要開的很大,可能會mle,所以我就用鄰接鍊錶儲存。 ↩︎
luogu P1983 車站分級 題解
符合了noip命題的特點,知識點不難,思維量是有的。step1 把題讀進去,理解。得到 非停靠點的等級 停靠點的等級 step2 把上述不等關係轉化為有向圖。即由非停靠點向停靠點連一條邊 step3 對於每個入度為零的點dfs找最長路。取其max step4 輸出max 1 code include...
拓撲排序 車站分級
一條單向的鐵路線上,依次有編號為1,2,n 的n個火車站。每個火車站都有乙個級別,最低為1級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求 如果這趟車次停靠了火車站x,則始發站 終點站之間所有級別大於等於火車站x的都必須停靠。注意 起始站和終點站自然也算作事先已知需要停靠的站點 例如,下表是...
車站分級(拓撲排序)
2013年noip全國聯賽普及組 題目描述 一條單向的鐵路線上,依次有編號為1,2,n的n個火車站。每個火車站都有乙個級別,最低為1級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求 如果這趟車次停靠了火車站x,則始發站 終點站之間所有級別大於等於火車站x的都必須停靠。注意 起始站和終點站自然...