P1983 車站分級(拓撲排序)

2021-10-09 05:23:35 字數 1204 閱讀 7845

題目傳送門

這題就是用拓撲排序分層

首先是建圖

每進行一次輸入,就將沒有停靠的站與停靠的站都建立一條邊

因為題目樣例不怎麼大,所以可以用鄰接矩陣

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的等級的站點都需要停靠,問最少需要多少個等級的站點 做法 如果某個點沒有車停靠,說明這個點的等級小於其他所有有車停靠的站點等級,於是連邊,最後跑一邊拓撲,求最大深度 一開始理解錯題意了,誤以為是從該點到終點站而不是出發點到終點站,於...