大佬们为什么这种思路不行?
查看原帖
大佬们为什么这种思路不行?
550074
cloudemakers楼主2023/1/5 17:09

一定要把整个图遍历一遍吗?这样直接变成算出来的点的答案不行吗?(有点记忆化的感觉)

#include<bits/stdc++.h>
using namespace std;
int n,m,u,v;
int ans[100010];
vector<int> a[100010];
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		a[v].push_back(u);//邻接表 
	}
	for (int i=n;i>=1;i--){
		if (!ans[i]) ans[i]=i;//如果这个点所到最大点没更新过 等于自己 
		for (int j=0;j<a[i].size();j++){
			if (!ans[a[i][j]]){//如果以这个点为终点的点的答案没更新 
				ans[a[i][j]]=ans[i];//以它为终点的点的最大值就等于 它自己所能到的最大的点
			}    											
		}
	}
	for (int i=1;i<=n;i++) printf("%d ",ans[i]); 
}
2023/1/5 17:09
加载中...