題目傳送門
這題就是用拓撲排序分層
首先是建圖
每進行一次輸入,就將沒有停靠的站與停靠的站都建立一條邊
因為題目樣例不怎麼大,所以可以用鄰接矩陣
for
(int i=
1;i<=m;i++
)//輸入
for(
int j=a[1]
;j<=a[x]
;j++
)//建圖
if(c[j]==0
)//不是停靠站
for(
int k=
1;k<=x;k++)if
(map[j]
[a[k]]==
0)//如果無邊
}
拓撲中,用乙個f存層數,用乙個s找最大層數
f[i]
=f[p[h]]+
1;//dp
s=max
(s,f[i]);
//找最大
呈上ac**
#include
#include
using
namespace std;
int n,m,x,h,t,s,a[
1005
],c[
1005
],p[
1005
],f[
1005
],du[
1005
],map[
1005][
1005];
voidtp(
)//入隊,標記,初值
while
(h}int
main()
for(
int j=a[1]
;j<=a[x]
;j++
)//建圖
if(c[j]==0
)//不是停靠站
for(
int k=
1;k<=x;k++)if
(map[j]
[a[k]]==
0)//如果無邊}tp
();//拓撲
cout/輸出
}
P1983 車站分級(拓撲排序)
一條單向的鐵路線上,依次有編號為 1,2,n 的 n 個火車站。每個火車站都有乙個級別,最低為 1 級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求 如果這趟車次停靠了火車站 x,則始發站 終點站之間所有級別大於等於火車站 x 的都必須停靠。注意 起始站和終點站自然也算作事先已知需要停靠的站...
P1983 車站分級
一條單向的鐵路線上,依次有編號為 1,2,n1,2,n的 nn個火車站。每個火車站都有乙個級別,最低為 11 級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求 如果這趟車次停靠了火車站 xx,則始發站 終點站之間所有級別大於等於火車站xx 的都必須停靠。注意 起始站和終點站自然也算作事先已知...
P1983 車站分級
題意 如果標號為x的站點有車停靠,那麼出發點到終點站的所有大於等於x的等級的站點都需要停靠,問最少需要多少個等級的站點 做法 如果某個點沒有車停靠,說明這個點的等級小於其他所有有車停靠的站點等級,於是連邊,最後跑一邊拓撲,求最大深度 一開始理解錯題意了,誤以為是從該點到終點站而不是出發點到終點站,於...