作业介绍

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

int n, m;
vector<int> g[100005];
int v[100005];  // 维护每个节点的入度信息
int cnt = 0;
int res[100005];

// 拓扑排序
void GTS(){
	// 广搜队列
	queue<int> q;
	// 找到入度为0的节点
	for(int i=1;i<=n;i++){
		if(v[i] == 0){
			q.push(i);
		}
	}
	// 开始广搜
	while(!q.empty()){
		// 取出对首节点
		int t = q.front();
		cnt++;
		res[cnt] = t;
		// 删除队首节点
		q.pop();
		for(int i=0;i<g[t].size();i++){
			// 删掉这条边,终点的入度-1
			int z = g[t][i];
			v[z]--;
			if(v[z] == 0) q.push(z);
		}
	}
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x, y;
		cin>>x>>y;
		// x ---> y
		g[x].push_back(y);
		v[y]++;
	}
	GTS();
	if(cnt < n) cout<<"has circle";
	else{
		for(int i=1;i<=cnt;i++){
			cout<<res[i]<<' ';
		}
	}
	return 0;
}

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
2
开始时间
2025-5-5 9:00
截止时间
2025-5-15 23:59
可延期
24 小时