b_mt_最长高度递减的旅游路线(dfs)
给你一个图,每个点有自己的权值,现在就是说你可以选择任意一个点开始,然后你走的话,只能走到点权比当前小的点。问最多能走多少个点。
输入
5 4
3 2 3 4 6
1 2
2 3
3 4
4 5
输出
4
思路:选即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,m,w[N];
vector<int> g[N];
int dfs(int u, int fa) {
int mx=1;
for (int v : g[u]) {
if (v == fa) continue;
mx=max(mx, dfs(v,fa)+1);
}
return mx;
}
int main() {
std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n>>m;
for (int i=1; i<=n; i++) cin>>w[i];
for (int i=0; i<m; i++) {
int u,v; cin>>u>>v;
if (w[u]>w[v]) g[u].push_back(v); //直接根据大小建图,更高效
if (w[u]<w[v]) g[v].push_back(u);
}
int ans=1;
for (int i=1; i<=n; i++) {
ans=max(ans, dfs(i,0));
}
cout<<ans;
return 0;
}