NOIp2013普及組 車站分級

2022-05-22 01:48:09 字數 1033 閱讀 3230

思路:

對於每一趟車,將區間內所有經停的站和所有未經停的站連一條邊,表示前者優先順序一定高於後者,然後用kahn跑一遍拓撲排序即可。然而這樣會創造大量多餘的邊,會tle1個點。

考慮一種優化:因為每趟車本身也有乙個優先順序,因此可以將這趟車也看作乙個點,每次先所有將經停的站連一條邊到這兩車上,表示這些站的優先順序一定大於等於車的優先順序,再將車連若干邊到未經停的點,表示車的優先順序一定大於未經停的站的優先順序。

1 #include2 #include3 #include4 #include5 inline int

getint()

12const

int n=2001,m=1000001;13

struct

list ;

16list e[m];

17int sz=0;18

int h[n]=;

19int

in[n]=;

20 inline void add_edge(const

int u,const

intv) ;

22 h[u]=sz;

23in[v]++;24}

25const

int inf=0x7fffffff;26

int ans=0;27

intn,m;

28 inline void

kahn()

33while(!q.empty()) 40}

41 ans=std::max(ans,d);42}

43}44int

main()

55int t=getint();

56 b[t]=true;57

for(register int j=s;j<=t;j++)

61else64}

65}66kahn();

67 printf("

%d\n

",(ans+1)>>1

);68

return0;

69 }

NOIP2013普及組 車站分級

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

NOIP2013 車站分級

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

noip2013 車站分級

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