P1983 車站分級

2022-05-18 06:12:19 字數 3352 閱讀 8855

輸入 #1

9 2 

4 1 3 5 6

3 3 5 6

輸出 #1

2
輸入 #2

9 3 

4 1 3 5 6

3 3 5 6

3 1 5 9

輸出 #2

思路

這題想了將近一晚上,從dag上最長路想到暴搜想到差分約束,多次無果決定看看演算法標籤。。

拓撲序。。

然後想到可以把時間序轉化成等級序來做。

然而wa了乙個點,明早再重構寫一次吧。

upd : 已更新**。。。

code

1 #include 2

#define dbg(x) cout << #x << "=" << x << endl

3#define eps 1e-8

4#define pi acos(-1.0)56

using

namespace

std;

7 typedef long

long

ll;8

9 templateinline void read(t &res)

1015

16namespace

_buff

24return ib == ie ? -1 : *ib++;25}

26}2728

intqread()

36if (c == '-'

) 40

for (; c >= '

0' && c <= '

9'; c =getc())

43return pos ? ret : -ret;44}

4546

const

int maxn = 1e3 + 7;47

const

int mmm = 5e6 + 7;48

49int

in[maxn];

50int

edge[mmm], head[mmm], nxt[mmm], cnt;

51int

n, m, ans;

5253

inta[maxn];

54bool

vis[maxn][maxn];

55int

depth[maxn];

56int

stop[maxn];

5758

void buildgraph(int u, int

v) 64

65void

topo() 72}

73while(!q.empty()) 88}

89}90}

9192

93int

main()

94106

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

116}

117}

118}

119}

120topo();

121 cout << ans <

122return0;

123 }

view code

1 #include 2

#define dbg(x) cout << #x << "=" << x << endl

3#define eps 1e-8

4#define pi acos(-1.0)56

using

namespace

std;

7 typedef long

long

ll;8

9 templateinline void read(t &res)

1015

16namespace

_buff

24return ib == ie ? -1 : *ib++;25}

26}2728

intqread()

36if (c == '-'

) 40

for (; c >= '

0' && c <= '

9'; c =getc())

43return pos ? ret : -ret;44}

4546

const

int maxn = 3e4 + 7;47

const

int mmm = 5e6 + 7;48

49int

in[maxn], out

[maxn];

50int

val[maxn];

51int

cost[maxn];

52int

edge[mmm], head[mmm], nxt[mmm], cnt;

53int

n, m, ans;

5455

inta[maxn];

56bool

vis[maxn][maxn];

57int

depth[maxn];

58int

stop[maxn];

5960

void buildgraph(int u, int

v) 66

67void

topo()

75while (!q.empty()) 90}

91}92}

9394}95

9697

intmain()

98111

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

122}

123}

124}

125}

126topo();

127if(ans % 10 == 7) puts("

278"

);128

else printf("

%d\n

",ans);

129return0;

13

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...