手写函数失效???
查看原帖
手写函数失效???
385869
Guderian_houjt楼主2024/3/24 21:17

代码如下,如果用在主函数外手写函数给dist数组赋初值,将无效。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1500+10;
struct edge
{
	int ver;
	long long val;
};
vector<edge> g[MAXN];
long long dist[MAXN];
bool vis[MAXN];
int n,m;
void spfa(int root)
{
	queue<int> q;
	q.push(root);
	vis[root]=true;
	while(!q.empty())
	{
		int u=q.front();q.pop();
		vis[u]=false;
		for(int i=0;i<g[u].size();i++)
		{
			int v=g[u][i].ver,w=g[u][i].val;
			if(dist[u]+w > dist[v])
			{
				dist[v]=dist[u]+w;
				if(!vis[v])
				{
					q.push(v);
					vis[v]=true;
				}
			}
		}
	}
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		edge in;
		in.ver=v;in.val=w;
		g[u].push_back(in);
	}
	for(int i=2;i<=n;i++)
	{
		dist[i]=LLONG_MIN;
	}
	spfa(1);
	if(dist[n]==LLONG_MIN) cout<<-1<<endl;
	else cout<<dist[n]<<endl;
	return 0;
}
/*
5 5
1 2 2
1 3 5
2 3 4
2 4 6
3 4 1

3 5 12
4 5 10
1 5 12
*/

73分 * 4

2024/3/24 21:17
加载中...