題意:給定一張有向圖,對於邊
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...