模板 拓撲序列

2022-05-10 02:42:11 字數 1155 閱讀 8427

拓撲序列有很多用途, 比如判環, 將樹上 / 圖上的問題轉化為序列上的問題再處理等等

尋找過程就是不斷找入度為0的點新增到q尾部

如果得到的拓撲序列長度不等於n 則說明有環

void toposort(int n)

while(!q.empty()) }

}

例題 可達性統計

此題可以用拓撲序+暴力合併解決

原因:題目給出了乙個dag 則必有合法拓撲序

反向遍歷拓撲序 則有在 i 之前的點都不可能指向 i 

所以用bitset儲存狀態從頂至底合併即可

/*

zeolim - an ac a day keeps the bug away

*///pragma gcc optimize(2)

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

typedef long long ll;

typedef long double ld;

typedef unsigned long long ull;

const ld pi = acos(-1.0);

const ld e = exp(1.0);

const int inf = 0x3f3f3f3f;

const int maxn = 3e4 + 10;

const ll mod = 1e9 + 7;

std::vector edge[maxn];

bitset cnt[maxn];

int deg[maxn] = ;

vector arr;

void toposort(int n)

while(!q.empty()) }

}void solve() }}

int main()

return 0;

}

拓撲排序模板

include include include include include using namespace std const int maxn 30 int head maxn ip,indegree maxn int n,m,seq maxn struct note edge maxn ma...

模板 拓撲排序

拓撲排序 將 小於 關係看做有向圖,形成一條排好序的關係,可能不唯一。queue實現,vector儲存 const int maxn 10005 int in maxn sum,n,m,fa maxn vectorg maxn void init void toposort 按字典序輸出 改為pri...

拓撲排序模板

演算法步驟 1.從aov網中選擇乙個沒有前驅的頂點 該定點的入度為0 並且輸出它 2.從aov網中選刪除該頂點,並且刪除以該頂點為尾的全部有向邊。3.重複上述兩步,知道剩餘的網中不再存在沒有直接前驅的頂點為止。hdu1285 include include include include inclu...