这题数据感觉非常弱,这个代码最多最多也只能拿50分吧,结果竟然拿了90分,估计就只有那一个点是需要按照“阿龙也可以选择如下一条线路:1→4→5→4→5,并在第 1 次到达 5 号城市时以 1 的价格买入水晶球,在第 2 次到达 4 号城市时以 6 的价格卖出水晶球,赚取的旅费数为 5。”这种类型的方法来得到最佳答案的吧。(毕竟样例也没过)
蒟蒻不会@,求帮忙
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m;
int ans;
int x,y,z;
int f[N];
int v[N];
vector<int>G[N];
void dfs(int x,int mx,int mn){
if(x==n){
ans=max(ans,mx-mn);
return ;
}
if(v[x])return ;
v[x]=1;
for(auto y:G[x]){
if(v[y])continue;
if(mx<f[y]){
dfs(y,f[y],mn);
}else if(mn>f[y]){
dfs(y,f[y],f[y]);
}
dfs(y,mx,mn);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>f[i];
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
G[x].push_back(y);
if(z==2)
G[y].push_back(x);
}
dfs(1,f[1],f[1]);
cout<<ans<<endl;
return 0;
}