洛谷 P3916 图的遍历(图上DFS)
反向建边+dfs。从最大值开始搜索。
AC代码如下:
#include <algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<queue> #define MAXN 100005 using namespace std;int n,m,temp1,temp2,ans[MAXN]; vector<int>map1[MAXN]; void dfs(int deep,int x){ if(!ans[deep]) ans[deep]=x; else return; for(int i=0;i<map1[deep].size();i++){ dfs(map1[deep][i],x); } } int main(){ scanf("%d%d",&n,&m); memset(ans,0,sizeof(ans)); for(int i=0;i<m;i++){ scanf("%d%d",&temp1,&temp2); map1[temp2].push_back(temp1); } for(int i=n;i>0;i--) dfs(i,i); for(int i=1;i<=n;i++) printf("%d ",ans[i]); return 0; }

浙公网安备 33010602011771号