1 条题解

  • 0
    @ 2023-3-27 21:07:10
    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=1e5+5,INF=1e9+5;
    int n,p,a[MAXN],f[MAXN],m[MAXN]; 
    vector<int> v[MAXN];
    void dfs(int x,int minn,int last){
    	int flag=1;
    	minn=min(a[x],minn);
    	if(m[x]>minn)
    		m[x]=minn,flag=0;
    	int maxx=max(f[last],a[x]-minn);
    	if(f[x]<maxx) f[x]=maxx,flag=0;
    	if(flag) return;
    	for(int i=0;i<v[x].size();i++)
    		dfs(v[x][i],minn,x);
    }
    int main(){
    	scanf("%d%d",&n,&p);
    	for(int i=1;i<=n;i++){
    		scanf("%d",&a[i]);
    		m[i]=INF;
    	}
    	for(int i=1;i<=p;i++){
    		int x,y,z;
    		scanf("%d%d%d",&x,&y,&z);
    		v[x].push_back(y);
    		if(z==2)
    			v[y].push_back(x);
    	}
    	dfs(1,INF,0);
    	printf("%d",f[n]);	
    }
    
    • 1

    信息

    ID
    126
    时间
    1000ms
    内存
    128MiB
    难度
    8
    标签
    递交数
    11
    已通过
    8
    上传者