luogu1980 車站分級

2022-06-30 07:45:11 字數 1374 閱讀 9347

一些火車站排成一行。給出一些火車的停靠站情況,要求對每乙個火車,其經過且不停靠的站的級別比它任意停靠的站的級別小。問所有車站最少需要多少個級別。

不要只看到這道題的背景設立在乙個區間上,就只想線段上的動規與貪心。由火車停靠站的情況可以得到不同站與不同站之間的級別滿足偏序關係,這樣就可以建立拓撲圖求最長路徑即可。

普通建圖$o(nm)$,要注意重邊的情況,否則會mle。

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

const int max_node = 1010;

struct topgraph

_nodes[max_node];

stackst;

int totnode;

void dfs(node *cur)

public:

void init(int n)

void addedge(int u, int v)

int longestpath()

return ans;

}}g;int stoppos[max_node];

bool vis[max_node][max_node];

int main()}}

printf("%d\n", g.longestpath() + 1);

return 0;

}

$o(n)$演算法,對每個火車建立乙個虛點,所有經過不停靠的站向虛點連邊權1的邊,虛點向所有停靠站連邊權0的邊,與原方法等價,卻減少了時間複雜度。 

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

const int max_node = 2010;

struct topgraph

_nodes[max_node];

stackst;

int totnode;

struct edge

_edges[max_node * max_node];

int _ecount;

void dfs(node *cur)

public:

void init(int n)

void addedge(int uid, int vid, int w)

int longestpath()

return ans;

}}g;

int stoppos[max_node];

int main()

printf("%d\n", g.longestpath() + 1);

return 0;

}

luogu1983 車站分級

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

swust oj 2553 車站分級

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

NOIP2013 車站分級

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