#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k, u, num = 0, inDegree[101];
vector<int> G[101];
queue<int> q;
cin >> n;
for(int v = 1; v <= n; v++){
// 依赖任务数作为入度
cin >> k;
inDegree[v] = k;
while(k--){
// 邻接表 u前驱节点 v后继 关联依赖任务 如1->3
cin >> u;
G[u].push_back(v);
}
}
// 拓扑排序 无依赖任务(入度==0)入队
for(int i = 1; i <= n; i++)
if(inDegree[i] == 0)
q.push(i);
while(!q.empty()){
// 获取无依赖任务
u = q.front(); q.pop();
// 统计任务数量
num++;
// 获取子任务(后继任务) 减去后继结点入度 并判断入度==0入队
for(auto v : G[u])
if(--inDegree[v] == 0)
q.push(v);
}
cout << (num == n ? '1' : '0');
}
PTA 7-34 任务调度的合理性 (25 point(s))
最新推荐文章于 2022-11-18 20:25:38 发布