56分SPFA
  • 板块P1807 最长路
  • 楼主dz_zhhx
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/8/24 21:23
  • 上次更新2023/11/6 19:28:43
查看原帖
56分SPFA
244456
dz_zhhx楼主2020/8/24 21:23
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt,tou=0,wei=0;
int head[55001],dis[55001];
int lie[55001];
bool pan[55001];
bool flag=0;
struct B
{
	int v,w,net;
}edge[250001];
void add(int from,int to,int zhi)
{
	edge[++cnt].v=to;
	edge[cnt].w=zhi;
	edge[cnt].net=head[from];
	head[from]=cnt;
}
int main()
{
//	freopen("in.in","r",stdin);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,-z);
	}
	memset(dis,0x7f,sizeof(dis));
	memset(pan,0,sizeof(pan));
	lie[++wei]=1;
	pan[1]=true;
	dis[1]=0;
//	for(int i=head[1];i;i=edge[i].net)
//	   dis[edge[i].v]=bian[1][edge[i].v];
	while(tou<wei)
	{
		tou++;
		int y=lie[tou];
		pan[y]=false;
		for(int i=head[y];i!=0;i=edge[i].net)
		{
			int v=edge[i].v;
			if(dis[v]>dis[y]+edge[i].w)
			{
				dis[v]=dis[y]+edge[i].w;
				if(!pan[v])
				{
					lie[++wei]=v;
					pan[v]=true;
			    }
			    if(v==n) flag=1;
			}
		}
	}
	if(!flag) cout<<-1<<endl;
	else cout<<-dis[n]<<endl;
	return 0;
}
2020/8/24 21:23
加载中...