HDU 5413 拓撲排序 BITSET

2021-08-04 14:17:11 字數 832 閱讀 6093

題意:給定一張有向圖,對於邊

ev>

,如果去掉它的話,u仍然可以到達v的話,那麼這條邊就是多餘邊。

解法:顯然的乙個思路是倒著做。先topo一遍,然後倒著來,這裡需要用到bitset維護每個點可以和哪些點直接相連,利用bitset是為了不超記憶體,然後用bitset處理出關係之後就可以遍歷尋找答案了。

#include using namespace std;

struct fastio

inline int xchar()

inline int xuint()

inline int xint()

inline void xstring(char *s)

inline void wchar(int x)

inline void wint(int x)

inline void wstring(const char *s)

~fastio()

} io;

const int maxn = 2e4+2;

int n, m, top, in[maxn], rec[maxn];

bitset dp[maxn];

int head[maxn], edgecnt;

struct edgee[100002];

struct nodeq[100002];

void add(int u, int v)

void toposort()

}for(int i=1; i<=m; i++)}}

io.wint(ans);

}return 0;

}

hdu 拓撲排序歸納

拓撲排序,其本質是輸出乙個全序關係,對於按要求輸出給定關係的題目,一般就是按照題目要求實現這個全序關係,這種題時常會先給乙個偏序關係,然後給出剩下的元素如何建立關係 字典序之類的 如果忘了那幾個詞是啥意思.偏序關係 滿足自反,反對稱,傳遞性的關係 全序關係 乙個偏序關係r,且對任意x,y有xry或y...

hdu1285(拓撲排序)

拓撲排序簡單來說就是把乙個圖的所有節點排序,使得每一條有向邊 u,v 對應的u都排在v的前面。拓撲排序最大的用途就是判斷乙個有向圖是否有環,當然判斷還有一種方法就是floyd演算法。如果用鄰接表的話拓撲排序的時間複雜度是o n e 鄰接矩陣是o n 2 n表示頂點數,e表示邊數,floyd時間複雜度...

HDU 2647拓撲排序

還有乙個地方需要注意 判斷輸出 1的情況不能只判斷沒有乙個入度為0的點,因為有可能在中間就出現矛盾了,如 a b c d c 有入度為0的點,但卻要輸出 1 include include include includeusing namespace std define max 10005 int...