为什么该题开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;
}