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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步