拓扑排序比较简单很多算法都类似于拓扑排序比如dij,先处理入度比自己低的点,然后就可以保证前面没有度数比自己低的点了,然后就直接放进答案里面..然后就没了,拓扑排序可以找到图的一种遍历顺序.
bitset可以很容易的处理集合问题bitset<n>f[N].这就处理了一个f[N]数组,使得里面的数字都为0,我们可以令f[i][j]=1让i数组的第j位变成1.然后可以使用|处理并集,&处理交集.
拓扑排序代码:</n>
int indg[N]; int n,m; vector<int>v[N],topo; bitset<N>f[N]; void toposort() { queue<int>q; for(int i=1;i<=n;i++) if(indg[i]==0) q.push(i); while(q.size()) { int u=q.front();q.pop(); topo.push_back(u); for(auto x:v[u]) if(--indg[x]==0) q.push(x); } }
bitset的定义:
bitset<N>f[N];
emm很简单吧--