spfa差分约束为何0分?(有2~3关注)
查看原帖
spfa差分约束为何0分?(有2~3关注)
377794
Level_1024楼主2022/7/31 10:25

悬赏两关注(可能三个)

#include<bits/stdc++.h>
using namespace std;
int n,m,T,vis[100005],index,vFirst[100005],dis[100005],tim[100005];
bool is=1;
struct Edge{
	int v,w,next;
}e[20005];
void add(int u,int v,int w)
{
	index++;
	e[index].v=v;
	e[index].w=w;
	e[index].next=vFirst[u];
	vFirst[u]=index;
 } 
void SPFA()
{
	queue<int> q;
	memset(dis,0x3f,sizeof(dis));
	dis[1]=0;
	q.push(1);
	vis[1]=1;
	int u,v;
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		vis[u]=0;
		for(int i=vFirst[u];i!=-1;i=e[i].next)
		{
			v=e[i].v;
			if(dis[v]>dis[u]+e[i].w)
			{
				dis[e[i].v]=dis[u]+e[i].w;
				if(!vis[v])
				{
					q.push(v);
					vis[v]=1;
					tim[v]++;
					if(tim[v]>=n)
					{
						cout<<"-1"<<endl;
						return ;
					 } 
				}  
			}
		}
	}
	return ;
}
int main()
{
		memset(vFirst,-1,sizeof(vFirst));
		memset(tim,0,sizeof(tim));
		memset(dis,0x3f,sizeof(dis));
		cin>>n>>m;
		for(int j=1;j<=m;j++)
		{
			int u,v,w;
			cin>>u>>v>>w;
			add(u,v,w);
			if(w>=0)
			{
				add(v,u,w);
			}
			
		}
		SPFA();
		if(is==0)
		{
			for(int i=1;i<=n;i++)
			{
				cout<<dis[i]<<'1';
			}
		}
	
	return 0;
}

2022/7/31 10:25
加载中...