拓扑排序比较简单很多算法都类似于拓扑排序比如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很简单吧--