为什么dis初始化为0x3f,而特判2147483647的时候是判断0x3f3f3f3f?
(这是上课的代码,就是不理解这一点)
#include<bits/stdc++.h>
using namespace std;
int n,m,s,x,y,z;
struct graph{
priority_queue<pair<int,int> >pq;
int vis[500005],dis[500005];
struct node{
int to;
int value;
int nxt;
}edges[500005];
int head[500005];
int cnt=0;
void push(int u,int v,int w){
cnt++;
edges[cnt].to=v;
edges[cnt].value=w;
edges[cnt].nxt=head[u];
head[u]=cnt;
}
void dijkstra(int s){
memset(dis,0x3f,sizeof(dis));//这里
memset(vis,0,sizeof(vis));
dis[s]=0;
pq.push(make_pair(0,s));
while(pq.size()){
int now=pq.top().second;
pq.pop();
if(vis[now])continue;
vis[now]=1;
for(int i=head[now];i;i=edges[i].nxt){
if(dis[now]+edges[i].value<dis[edges[i].to]){
dis[edges[i].to]=dis[now]+edges[i].value;
pq.push(make_pair(-dis[edges[i].to],edges[i].to));
}
}
}
}
}G;
int main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
G.push(x,y,z);
}
G.dijkstra(s);
for(int i=1;i<=n;i++){
if(G.dis[i]==0x3f3f3f3f)cout<<2147483647<<' ';//这里
else cout<<G.dis[i]<<' ';
}
return 0;
}