P1613
  • 板块学术版
  • 楼主Tzs_yousa
  • 当前回复20
  • 已保存回复20
  • 发布时间2022/5/14 19:43
  • 上次更新2023/10/28 01:26:56
查看原帖
P1613
453100
Tzs_yousa楼主2022/5/14 19:43

为什么该题开longlong之后dis数组初始化为0x7f就会错,改成0x3f就对了 错误代码,0x7f改一下就对了为啥。

#include <bits/stdc++.h>
#define int long long
const int MAXN = 5e5 + 10;
using namespace std;
int n, m, dp[51][51][65], dis[51][51];
/*struct edge{
	int to, next;
}e[MAXN << 1];
void add(int u, int v)
{
	e[++cnt].to = v;
	e[cnt].next = head[u];
	head[u] = cnt;
}*/
signed main()
{
	scanf("%lld%lld", &n, &m);
	memset(dis, 0x7f, sizeof(dis));
	for (int i = 1; i <= m; i++)
	{
		int u, v;
		scanf("%lld%lld", &u, &v);
		dp[u][v][0] = 1;
		dis[u][v] = 1;
	}
	for (int k = 1; k <= 64; k++)
	{
		for (int  i = 1; i <= n; i++)
		{
			for (int t = 1; t <= n; t++)
			{
				for (int j = 1; j <= n; j++)
				{
					if(dp[i][t][k - 1] && dp[t][j][k - 1])
					{
						dp[i][j][k] = 1;
						dis[i][j] = 1;
					}
				}
			}
		}
	}
	for (int k = 1; k <= n; k++)
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
				dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
	printf("%lld", dis[1][n]);
	return 0;
}
2022/5/14 19:43
加载中...