NOIP2013 車站分級

2021-08-07 09:11:07 字數 2190 閱讀 9007

一條單向的鐵路線上,依次有編號為 

1, 2, ..., n 

的 n 

個火車站。每個火車站都有乙個級

別,最低為 

1 級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求:如果這趟車 次停靠了火車站 

x,則始發站、終點站之間所有級別大於等於火車站 

x 的都必須停靠。(注 意:起始站和終點站自然也算作事先已知需要停靠的站點)

例如,下表是 

5 趟車次的運**況。其中,前 

4 趟車次均滿足要求,而第 

5 趟車次由於 停靠了 

3 號火車站(

2 級)卻未停靠途經的 

6 號火車站(亦為 

2 級)而不滿足要求。 

現有 m 

趟車次的運**況(全部滿足要求),試推算這 

n 個火車站至少分為幾個不同的級別。

第一行包含 

2 個正整數 n, 

m,用乙個空格隔開。

第 i 

+ 1 

行(1 ≤ 

i ≤ 

m)中,首先是乙個正整數 si

(2 ≤ si 

≤ n),表示第 

i 趟車次有 si 

個停靠站;接下來有 si 

個正整數,表示所有停靠站的編號,從小到大排列。每兩個數之間用乙個 空格隔開。輸入保證所有的車次都滿足要求。 

輸出只有一行,包含乙個正整數,即 

n 個火車站最少劃分的級別數。 

9 2

4 1 3 5 6

3 3 5 6

9 3

4 1 3 5 6

3 3 5 6

3 1 5 92

3【資料範圍】

對於 20%

的資料,

1 ≤ n, 

m ≤ 10; 

對於 50%

的資料,

1 ≤ n, 

m ≤ 100; 

對於 100%

的資料,

1 ≤ n, 

m ≤ 1000。 

一道noip的題,也是一道經典的拓撲排序。

題意:有n個火車站,有m趟車,第i趟車有si個停靠站從小到大排列。

如果這趟車 次停靠了火車站x,

則始發站、終點站之間所有級別大於等於火車站 

x 的都必須停靠

。(注 意:起始站和終點站自然也算作事先已知需要停靠的站點),問這n個火車站至少分為幾個不同的級別。

解法:紅字中可以很明顯地想到拓撲排序,將停靠的和不停靠的火車站建邊,再做拓撲排序,層數即為至少要分的級別數。

此題用層次寬搜更加清晰,而且統計入度為0的點的過程在修改的時候統計。

#include #include #include #include #include using namespace std;

int t,len,p1,p2,p3,ans;

int a[10000],b[10000],mat[1005][1005],ind[10000],q[1000000];

bool flag[10000];

int main()

len=0;

for(int j=a[1];j<=a[t];j++)

if(!flag[j]) b[++len]=j;

else flag[j]=false;

for(int j=1;j<=t;j++)

for(int k=1;k<=len;k++) mat[a[j]][b[k]]=1;

} for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(mat[i][j]) ind[j]++;

p1=1;p2=0;

for(int i=1;i<=n;i++)

if(!ind[i]) q[++p2]=i;

while(p1<=p2)

p1=p3+1;ans++;

} printf("%d\n",ans);

return 0;

}

noip2013 車站分級

一條單向的鐵路線上,依次有編號為 1,2,n1,2,n的 nn個火車站。每個火車站都有乙個級別,最低為 11 級。現有若干趟車次在這條線路上行駛,每一趟都滿足如下要求 如果這趟車次停靠了火車站 xx,則始發站 終點站之間所有級別大於等於火車站xx 的都必須停靠。注意 起始站和終點站自然也算作事先已知...

NOIP2013普及組 車站分級

題目 洛谷p1983 vijos p1851 codevs3294。題目大意 有一些車停靠某些站。現在要給所有站分級,規定一輛車停靠的所有站的最小級數必須大於 起點 終點 所有不停靠的站的最大級數。問至少分成幾種不同的級數?解題思路 由於停靠的站級數大於不停靠的站,我們把每列車停靠的站向不停靠的連一...

NOIp2013普及組 車站分級

思路 對於每一趟車,將區間內所有經停的站和所有未經停的站連一條邊,表示前者優先順序一定高於後者,然後用kahn跑一遍拓撲排序即可。然而這樣會創造大量多餘的邊,會tle1個點。考慮一種優化 因為每趟車本身也有乙個優先順序,因此可以將這趟車也看作乙個點,每次先所有將經停的站連一條邊到這兩車上,表示這些站...