为什么一定要用memset 才可以AC
查看原帖
为什么一定要用memset 才可以AC
780757
SY_Nightmare楼主2023/8/25 13:03

之前是这样写的

#include<bits/stdc++.h>
using namespace std;
int n,m;
int dis[1505]={-1};
int u,v,w;
int my_map[1505][1505];
queue<int> q;
void SPFA()
{
	dis[1]=0;
	q.push(1);
	while(!q.empty())
	{
		int flag=q.front();
		q.pop();
		for(int i=1;i<=n;i++)
		{
			if(my_map[flag][i]&&dis[i]<dis[flag]+my_map[flag][i])
			{
				dis[i]=dis[flag]+my_map[flag][i];
				q.push(i);
			}
		}
	}
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d %d",&u,&v,&w);
		my_map[u][v]=max(my_map[u][v],w);
	}
	SPFA();
	printf("%d",dis[n]);
	return 0;
}

只有78分,于是换了memset初始化后,像这样

#include<bits/stdc++.h>
using namespace std;
int n,m;
int dis[1505];
int u,v,w;
int my_map[1505][1505];
queue<int> q;
void SPFA()
{
	memset(dis,-1,sizeof(dis));
	dis[1]=0;
	q.push(1);
	while(!q.empty())
	{
		int flag=q.front();
		q.pop();
		for(int i=1;i<=n;i++)
		{
			if(my_map[flag][i]&&dis[i]<dis[flag]+my_map[flag][i])
			{
				dis[i]=dis[flag]+my_map[flag][i];
				q.push(i);
			}
		}
	}
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d %d",&u,&v,&w);
		my_map[u][v]=max(my_map[u][v],w);
	}
	SPFA();
	printf("%d",dis[n]);
	return 0;
}

就AC了

这是为什么???

2023/8/25 13:03
加载中...