1 条题解
-
0
这道题要求为憨憨规划一条骑行路线,从某个路口出发,仅往东骑行,经过尽可能多的路口后到达终点路口 i。
我们可以利用图论中的拓扑排序处理节点依赖关系,并结合动态规划思想计算最长路径。由于题目中每个路口只能往东骑行,整张图就是一个有向无环图。通过拓扑排序可确保在处理某个节点时,其所有前驱节点均已处理完毕,从而利用动态规划来求解。
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n,m,d[N],ans[N]; vector<int> edge[N]; void TopologicalSort() { queue<int> q; for(int i=1;i<=n;i++) { if(d[i]==0)//将入度为0的点加入队列 { ans[i]=1; q.push(i); } } while(q.size()) { int now=q.front(); q.pop(); for(int i:edge[now]) { d[i]--; if(d[i]==0) q.push(i);//有新的入度为0的点,继续加入队列 ans[i]=max(ans[i],ans[now]+1);//更新答案 } } } int main() { cin>>n>>m; while(m--) { int x,y; cin>>x>>y; d[y]++;//统计入度 edge[x].push_back(y);//单向边 } TopologicalSort();//拓扑排序 for(int i=1;i<=n;i++) { cout<<ans[i]<<endl;//输出答案 } }
- 1
信息
- ID
- 146
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 13
- 已通过
- 6
- 上传者