struct TopologicalSort{
const int N=60;
//邻接表储存图
vector<int> v[N];
//记录答案序列
vector<int>ans;
//记录点i的入度
int in[N];
bool tuopu(int n){
//使用优先队列(优先队列是大顶堆)*
priority_queue<int,vector<int>,greater<int> >q;
int p;
//选择当前入度为零的点加入队列
for(int i=1;i<=n;i++){
if(in[i]==0)q.push(i);
}
while(!q.empty()){
p=q.top();
q.pop();
ans.push_back(p);
for(int i=0;i<v[p].size();i++){
//把点p删除,把p的所有下节点的入度减一
in[v[p][i]]--;
//如果此时点v[p][i]的入度为零,则把这个点加入队列
if(in[v[p][i]]==0)q.push(v[p][i]);
}
}
//如果答案序列的长度和n不一致,则无答案
if(ans.size()==n)return true;
else return false;
}
};