欲望以提升热忱,毅力以磨平高山!|

XichenOC

园龄:1个月粉丝:4关注:0

2025-01-20 19:10阅读: 6评论: 0推荐: 0

P1137 旅行计划

P1137 旅行计划

题目翻译:

给你一个图,求出每一个点西方有多少点可以到

思路:

我们可以发现,要求只能从西往东走,着可以发现这就是一个拓扑排序的过程,但要求出西方有多少个点,这我们可以给每一个节点设置一编号,及他前方点的个数(答案),在拓扑一个新的入度为零的点将他的值改成前面点的值加一即可

完整代码:

#include<bits/stdc++.h>
using namespace std;
const int N=200010;
vector<int>e[N];
int in[N],d[N];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		e[u].push_back(v);
		in[v]++;
	}
	vector<int>ans;
	queue<int>q;
	for(int i=1;i<=n;i++){
		if(!in[i]){
			q.push(i);
		}
	}
	while(!q.empty()){
		int u=q.front();
		q.pop();
		ans.push_back(u);
		for(auto it:e[u]){
			in[it]--;
			if(!in[it]){
				q.push(it);
				d[it]=d[u]+1;
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<d[i]+1<<endl;
	}
}

拓扑排序讲解

本文作者:XichenOC

本文链接:https://www.cnblogs.com/XichenOC/p/18682357

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   XichenOC  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起