傳送門
先了解一下拓撲排序
那麼了解了之後我們再來看一下這道題
看這個條件:
如果這趟車次停靠了火車站 x,則始發站、終點站之間所有級別大於等於火車站x 的都必須停靠。
這個條件等價於每乙個沒有停靠的點的級別都小於停靠過的站點的級別
題目要求的是最少劃分的級別數
那麼我們可以考慮拓撲排序
對於一條路徑x1→x2,我們在這裡面尋找沒有停靠的站點,然後從這個沒有停靠的站點向每乙個停靠過的站點連邊(注意開乙個vis陣列避免重邊),然後拓撲排序板子稍微改一下就可以了
#includeusingnamespace
std;
const
int maxn=3000010
;const
int maxn=1005
;int
head[maxn],to[maxn],nxt[maxn];
intin
[maxn],cnt,dep[maxn];
inta[maxn],flag[maxn],vis[maxn][maxn],ans;
//flag標記是否停靠,vis去重邊
inline
void add(int u,int
v) //
鄰接鍊錶存邊
intn,m;
intmain()
for(int j=a[1]+1;j<=a[k];j++)}}
}}
queue
q;for(int i=1;i<=n;i++)
while(!q.empty())
}cout
<}
P1983 車站分級
一條單向的鐵路線上,依次有編號為 1,2,n1,2,n的 nn個火車站。每個火車站都有乙個級別,最低為 11 級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求 如果這趟車次停靠了火車站 xx,則始發站 終點站之間所有級別大於等於火車站xx 的都必須停靠。注意 起始站和終點站自然也算作事先已知...
P1983 車站分級
題意 如果標號為x的站點有車停靠,那麼出發點到終點站的所有大於等於x的等級的站點都需要停靠,問最少需要多少個等級的站點 做法 如果某個點沒有車停靠,說明這個點的等級小於其他所有有車停靠的站點等級,於是連邊,最後跑一邊拓撲,求最大深度 一開始理解錯題意了,誤以為是從該點到終點站而不是出發點到終點站,於...
P1983 車站分級
傳送門 這道題有拓撲排序的思想,題目中給出級別大於或者等於的火車站都得停下來。換言之沒有停下來的等級就是比他小,我們要求出最大的層數。求層數也有點像bfs了 include using namespace std const int maxn 1e3 10 int e maxn maxn int r...