求助SPFA 90分
  • 板块P2648 赚钱
  • 楼主liuyihong250
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/11/29 10:54
  • 上次更新2023/10/27 01:02:02
查看原帖
求助SPFA 90分
754932
liuyihong250楼主2022/11/29 10:54
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int to,wi;
};
int dis[10005],in[10005],d,m,n,f,idx,s1,s2,wi;
vector <node> ve[10005];
queue <int> que;
void SPFA()
{
	memset(dis,0x3f,sizeof(dis));
	dis[1] = 0;
	que.push(1);
	in[1]=1;
	while(que.empty()==0)
	{
		int v=que.front();
		in[v]=0;
		que.pop();
		for(int i=0;i<ve[v].size();i++)
		{
			int u = ve[v][i].to;
			if(dis[u]>dis[v]+ve[v][i].wi)
			{
				dis[u]=dis[v]+ve[v][i].wi;
				if(in[u]==0)
				{
					que.push(u);
					in[u]=1;
				}
			}
		}
	}
}
int main()
{
	cin>>d>>m>>n>>f;
	for(int i=1;i<=m;i++)
	{
		cin>>s1>>s2;
		ve[s1].push_back(node{s2,-d});
	}
	for(int i=1;i<=f;i++)
	{
		cin>>s1>>s2>>wi;
		ve[s1].push_back(node{s2,wi-d});
	}
	SPFA();
	int ans=0x3f3f3f3f;
	if(que.empty()>=1)
	{
		for(int i=1;i<=n;i++)
		{
			ans=min(ans,dis[i]);
		}
		cout<<-ans+d;
	}
	else
	{
		cout<<"orz";	
	}
	return 0;
}
2022/11/29 10:54
加载中...