找回密码
 中文实名注册
查看: 236|回复: 2

P1073

[复制链接]

12

主题

21

帖子

1510

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1510
发表于 2024-5-19 16:12:59 | 显示全部楼层 |阅读模式
[C++] 纯文本查看 复制代码
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,m,cnt,h1[900001],h2[900001],mid,f1[900001],f2[900001],ans=-0x3f3f3f3f;
int j[900001];
bool b[900001];
struct edge{
	int n,t;
}a1[900001],a2[900001];
void add1(int f,int t)
{
	a1[++cnt].t=t;
	a1[cnt].n=h1[f];
	h1[f]=cnt;
}
void add2(int f,int t)
{
	a2[++cnt].t=t;
	a2[cnt].n=h2[f];
	h2[f]=cnt;
}
void spfa1(int s) 
{
	queue<int> q;
	memset(f1,0x3f,sizeof f1);
	memset(b,0,sizeof b);
	b[s]=1;
	q.push(s);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();b[u]=0;
		f1[u]=min(f1[u],j[u]);
		for(int i=h1[u];i;i=a1[i].n)
		{
			int to=a1[i].t;
			if(f1[to]>f1[u])
			{
				f1[to]=f1[u];
				if(!b[to]) b[to]=1,q.push(to);
			}
		}
	}
}
void spfa2(int s) 
{
	queue<int> q;
	memset(b,0,sizeof b);
	b[s]=1;
	q.push(s);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();b[u]=0;
		f2[u]=max(f2[u],j[u]);
		for(int i=h2[u];i;i=a2[i].n)
		{
			int to=a2[i].t;
			if(f2[to]<f2[u])
			{
				f2[to]=f2[u];
				if(!b[to]) b[to]=1,q.push(to);
			}
		}
	}
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>j[i];
    for(int i=1;i<=m;i++)
	{
		int x,y,w;
		cin>>x>>y>>w;
		add1(x,y),add2(y,x);
		if(w==2) add1(y,x),add2(x,y);
	}
	spfa1(1);
	spfa2(n);
	for(int i=1;i<=n;i++) ans=max(ans,f2[i]-f1[i]);
	cout<<ans;
    return 0;
}
回复

使用道具 举报

5

主题

125

帖子

2190

积分

金牌会员

Rank: 6Rank: 6

积分
2190
发表于 2024-6-9 18:56:05 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?中文实名注册

x
回复

使用道具 举报

5

主题

125

帖子

2190

积分

金牌会员

Rank: 6Rank: 6

积分
2190
发表于 2024-6-9 19:25:20 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?中文实名注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

小黑屋|东台市机器人学会 ( 苏ICP备2021035350号-1;苏ICP备2021035350号-2;苏ICP备2021035350号-3 )

GMT+8, 2024-11-1 09:26 , Processed in 0.041066 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表