化简后
```cpp
#include<bits/stdc++.h>
#define I(e) for(int i=1;i<=e;i++)
using namespace std;
vector<int>a[100010];
int V[100010];
int c[100010];
int n,m;
int ans=0;
void dfs(int place,int mi,int an){
//cout<<place<<" "<<mi<<" "<<an<<endl;
if(V[place]>=2){
return ;
}
V[place]++;
int _min=min(c[place],mi);
int _ans=max(an,c[place]-_min);
ans=max(ans,_ans);
for(int i=0;i<a[place].size();i++){
dfs(a[place][i],_min,_ans);
}
}
int main(){
//freopen("P1073_2.in","r",stdin);
cin>>n>>m;
I(n){
scanf("%d",&c[i]);
}
I(n){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
a[x].push_back(y);
if(z==2){
a[y].push_back(x);
}
}
dfs(1,0xfffffff,0);
cout<<ans;
return 0;
}
```
by liyixuan5 @ 2022-04-28 19:19:53