求调
查看原帖
求调
1142179
Main_Lid楼主2025/1/22 21:34
#include<bits/stdc++.h>
using namespace std;
int n;
int s,ts;
vector<pair<int,int> > e[3000010];
int dis[3000010];
bool vis[3000010];
int w[3000010];
int m,k;
void add(int u,int v,int w)
{
	e[u].push_back({v,w});
}
void dijkstra()
{
	memset(vis,0,sizeof vis);
	memset(dis,-0x3f,sizeof dis);
	priority_queue<pair<int,int> > q;
	dis[1]=0;
	q.push({dis[1],1});
	while(q.size())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x])continue;
		vis[x]=1;
		for(auto t:e[x])
		{
			int y=t.first,v=t.second;
			if(dis[y]<dis[x]+v)
			{
				dis[y]=dis[x]+v;
				q.push({dis[y],y});
			}
		}
	}
	return ;
}
signed main()
{
	cin>>n>>m;

	for(int i=1;i<=n;i++)
	{
		cin>>w[i];
		e[i].push_back({i+1*n,-w[i]});
		e[i+1*n].push_back({i+2*n,w[i]});
	}
	for(int i=1;i<=m;i++)
	{
		int u,v,p;
		cin>>u>>v>>p;
		add(u,v,0);
		add(u+n,v+n,0);
		add(u+2*n,v+2*n,0);
		if(p==2)
		{
			add(v,u,0);
			add(v+n,u+n,0);
			add(v+2*n,u+2*n,0);
		}
	}
	dijkstra();
	if(dis[3*n]<=0)puts("0");
	else cout<<dis[3*n]<<endl;
	return 0;
}
//	for(int i=1;i<=k;i++)add(ts+i*n-n,ts+i*n,0);
2025/1/22 21:34
加载中...