思路:
對於每一趟車,將區間內所有經停的站和所有未經停的站連一條邊,表示前者優先順序一定高於後者,然後用kahn跑一遍拓撲排序即可。然而這樣會創造大量多餘的邊,會tle1個點。
考慮一種優化:因為每趟車本身也有乙個優先順序,因此可以將這趟車也看作乙個點,每次先所有將經停的站連一條邊到這兩車上,表示這些站的優先順序一定大於等於車的優先順序,再將車連若干邊到未經停的點,表示車的優先順序一定大於未經停的站的優先順序。
1 #include2 #include3 #include4 #include5 inline intgetint()
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 的都必須停靠。注意 起始站和終點站自然也算作事先已知...