拓撲序列有很多用途, 比如判環, 將樹上 / 圖上的問題轉化為序列上的問題再處理等等
尋找過程就是不斷找入度為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...