数据过水,判断忘加100WA
查看原帖
数据过水,判断忘加100WA
322403
litianjing楼主2024/7/8 14:59

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=100005;
int read(){
	char ch=getchar();
	int x=0,f=1;
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x*f;
}
int n,m,val[maxn],vis[maxn],vis2[maxn],val1[maxn],val2[maxn];
vector <int> a[maxn*5],b[maxn*5];
void dfs(int u,int mai){
	if(vis[u]==1) return;
	vis[u]=1;
	mai=min(mai,val[u]);
	val1[u]=mai;
	for(int i=0;i<a[u].size();i++){
		dfs(a[u][i],mai);
	}
}
void dfs2(int u,int mai){
	if(vis2[u]==1) return;
	vis2[u]=1;
	mai=max(val[u],mai);
	val2[u]=mai;
	for(int i=0;i<b[u].size();i++){
		dfs2(b[u][i],mai);
	}
}
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++){
		val[i]=read();
	}
	for(int i=1;i<=m;i++){
		int x,y,z;
		x=read(),y=read(),z=read();
		if(z==1){
			a[x].push_back(y);
			b[y].push_back(x);
		}else if(z==2){
			a[x].push_back(y);
			a[y].push_back(x);
			b[x].push_back(y);
			b[y].push_back(x);
		}
	}
	dfs(1,INT_MAX);
	dfs2(n,0);/*
	for(int i=1;i<=n;i++){
		cout<<val2[i]<<endl;
	} */
	int ma=0;
	for(int i=1;i<=n;i++){
		/*if(vis[i]&&vis2[i])*/
		ma=max(ma,val2[i]-val1[i]);
	}
	printf("%d\n",ma);
	return 0; 
}
2024/7/8 14:59
加载中...