Luogu P5603 小C與桌遊

2022-02-22 13:08:29 字數 1261 閱讀 1537

這個題一看和入度扯上關係就是明顯的topo了。

對於最優情況,直接維護小根堆,貪心即可。

對於最劣情況,顯然直接維護大根堆然後貪心是錯誤的(反例見luogu題解),所以每次要取出所有能拓展的節點,依次加入佇列topo即可。這裡注意當連到的點比當前最大值大時,壓入大根堆,

否則加入佇列。

code

#include#include#include#include#include#define maxn 500010

std::priority_queueq1;

std::priority_queueq2;

int n, m, res1, res2;

int head[maxn], cnt;

int in1[maxn], in2[maxn];

struct node edge[maxn];

class queue

inline int front(void)

inline void pop(void)

inline bool empty(void)

} q;

inline int read(void) while (ch < '0' || ch > '9');

do while (ch >= '0' && ch <= '9');

return f * x;

}inline int _max(int x, int y)

inline void add_edge(int x,int y)

void toposort1(void)

}return;

}void toposort2(void)

while(!q.empty())}}

}return;

}int main()

for (int i = 1; i <= n;++i)

if(!in1[i]) q1.push(-i), q2.push(i);

toposort1();

toposort2();

printf("%d\n%d\n", res1, res2);

return 0;

}

洛谷P5603 小C與桌遊

題目鏈結 小c是乙個熱愛桌遊的高中生,現在他被乙個桌遊難住了,快來幫幫他!這個桌遊的地圖可以被抽象成乙個 n 個點,m 條邊的有向無環圖 不保證連通 小c在這個地圖上行走,小c能走到某個點當且僅當能夠到達這個點的所有點都已經被小c走到。小c會走到每個點恰好 1 次,並且他能走到哪些點與他當前所在的點...

拓撲排序 貪心 小C與桌遊(洛谷 P5603)

題目描述 這個桌遊的地圖可以被抽象成乙個 n 個點,m 條邊的有向無環圖 不保證連通 小c在這個地圖上行走,小c能走到某個點當且僅當能夠到達這個點的所有點都已經被小c走到。小c會走到每個點恰好 1 次,並且他能走到哪些點與他當前所在的點沒有關係 即可以走到與當前所在的點沒有連邊的點,只要滿足之前的條...

洛谷10月月賽 III 小C與桌遊

該問題可以分為兩個子問題 1.求一種拓撲順序使點的編號最大值的更新次數最多。2.求一種拓撲順序使點的編號最大值的更新次數最少。對於第乙個子問題,我們貪心的想,每次走到所有能走的點中編號最小的點。這種貪心顯然是正確的,因為如果我們先走編號較大的點,再走編號較小的點,顯然不如先走編號較小的點更優一些。所...