图的遍历
题目
AC代码
#include<iostream>
#include<vector>
using namespace std;
int A[100100];
vector<int> G[100100];
void fds(int a,int b)
{
if(A[a]) return;
A[a]=b;
for(int i=0;i<G[a].size();i++)
{
fds(G[a][i],b);
}
}
int main()
{
int v,m,v1,v2;
cin>>v>>m;
for(int i=1;i<=m;i++)
{
cin>>v1>>v2;
G[v2].push_back(v1);
}
for(int i=v;i>0;i--)
fds(i,i);
for(int i=1;i<=v;i++)
cout<<A[i]<<" ";
return 0;
}
解题思路
用vector存储图
从最大的点倒着推,建立反向图。
建立一个数组用来存储当前点能到达的最大的点
出现问题
一部分测试点无法通过
原因数组开小了