題解
其實這道題可以跑乙個拓撲排序
我們看這些這車站,沿途停過的車站一定比未停的車站級別高
所以我們想到:
未停靠的車站向已經停靠的車站連一條邊,入度為0的車站級別就是1啦
然後我們把入度為0的邊依次取出來,那麼它的出邊所指車站就一定比這個車站級別高
那麼也就是說,乙個車站的級別一定比所有指向它的車站中,級別最高的那個車站級別還要高1級
注意
a[ ] 暫時儲存每一趟車站
flag[ ] 暫時判斷每個車站停不停
vis[ ][ ] 防止建重邊
由於可能會建很多邊,所以拓撲排序中與邊有關的陣列一定要開大
注意看這裡
也就是說,不一定每個車站都要從頭開到尾,起止點不一定
**
#includeusingnamespace
std;
const
int da=4000020
;const
int maxn=10005
;int
n,m,k;
int head[maxn],nxxt[da],in[maxn],to[da],cnt=0
;int ji[maxn],ans=0
,a[maxn];
bool
vis[maxn][maxn],flag[maxn];
void add(int start,int
end)
intmain()
for(int j=a[1];j<=a[k];j++)}}
}}priority_queue
,greater >q;
for(int i=1;i<=n;i++)
}while(!q.empty())
}printf(
"%d\n
",ans);
return0;
}
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...