最优贸易
2025-08-03 12:24:23
发布于:浙江
4阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n+1];
vector<int> g[n+1];
vector<int> h[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
g[x].push_back(y);
h[y].push_back(x);
if(z==2){
g[y].push_back(x);
h[x].push_back(y);
}
}
queue<int> q;
int ta[n+1],tb[n+1];
memset(ta,0x3f,sizeof(ta));
ta[1]=(1LL<<31)-1;
q.push(1);
while(!q.empty()){
int t=q.front();
q.pop();
ta[t]=min(ta[t],a[t]);
int l=g[t].size();
for(int i=0;i<l;i++){
if(ta[t]<ta[g[t][i]]){
ta[g[t][i]]=ta[t];
q.push(g[t][i]);
}
}
}
memset(tb,0,sizeof(tb));
q.push(n);
while(!q.empty()){
int t=q.front();
q.pop();
tb[t]=max(tb[t],a[t]);
int l=h[t].size();
for(int i=0;i<l;i++){
if(tb[t]>tb[h[t][i]]){
tb[h[t][i]]=tb[t];
q.push(h[t][i]);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,tb[i]-ta[i]);
}
cout<<ans<<endl;
return 0;
}
这里空空如也
有帮助,赞一个