为什么不同的初值会影响最后的结果

P1807 最长路

另附82分屑代码 ```cpp #include<bits/stdc++.h> using namespace std; int num[4505], dis[4005], n, m; bool vis[4505]; struct node{ int to, nxt, w; }e[50005]; int head[50005], cnt; void add(int u, int v, int w) { e[++cnt].to = v; e[cnt].nxt = head[u]; e[cnt].w = w; head[u] = cnt; } queue<int> q; int main() { cin>>n>>m; for(int i = 1; i <= m; i++) { int u, v, w; cin>>u>>v>>w; add(u, v, w); } q.push(1); memset(dis, -0x3f, sizeof(dis));//改成for(int i = 1; i <= n; i++) dis[i] = -114514;并在最后判断就过了 dis[1] = 0; vis[1] = 1; num[1]++; while(!q.empty()) { int u = q.front(); q.pop(); if(num[u] > n) { cout<<"-1"; return 0; } for(int i = head[u]; i; i = e[i].nxt) { int v = e[i].to; if(dis[v] < dis[u] + e[i].w) { dis[v] = dis[u] + e[i].w; if(!vis[v]) { num[v]++; vis[v] = 1; q.push(v); } } } vis[u] = 0; } if(dis[n] == -0x3f3f3f3f) dis[n] = -1; cout<<dis[n]; return 0; }
by Midnight_szx @ 2024-01-23 15:57:43


@[Midnight_szx](/user/801371) 因为-0x3f=0xC1,所以memset时dis会赋成0xc1c1c1c1,而末尾所判为-0x3f3f3f3f=0xc0c0c0c1,二者不相等,故有误。
by murder_drones @ 2024-01-24 08:11:50


@[runzelasb](/user/610393) 哇谢谢
by Midnight_szx @ 2024-01-24 08:25:12


@[runzelasb](/user/610393) %%%orz
by Midnight_szx @ 2024-01-24 08:25:28


|