1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; /* 反向考虑每个点可以到哪些点,从编号最大的点开始考虑 如果编号大的点能到,编号小的点就可以不走了,这样每个点最多被访问一次 */ vector<int> a[100010]; int ma[100010];//存储每个点可以走到的最大的编号 bool f[100010]; //x点,来自哪个最大点 void dfs(int x,int from){ //如果该点来自哪个点,没有被求过 if(ma[x]==0){ ma[x] = from; for(int i = 0;i < a[x].size();i++){ dfs(a[x][i],from); } } } int n,m; int main(){ cin>>n>>m; int x,y; for(int i = 1;i <= m;i++){ cin>>x>>y; a[y].push_back(x); } for(int i = n;i >= 1;i--){ dfs(i,i);//从i点开始搜索 } for(int i = 1;i <= n;i++){ cout<<ma[i]<<" "; } }
- 1
信息
- ID
- 1093
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者