rt,用priority_queue写的dijkstra,用结构体里存的d值比大小100分,用dis数组比大小只有30分
结构体版
#include <bits/stdc++.h>
using namespace std;
const int N=100005,M=500005;
struct node
{
int v,d;
};
struct cmp
{
bool operator()(node x,node y)
{
return x.d>y.d
}
};
priority_queue<node,vector<node>,cmp> q;
int n,m,s,dis[N],v[M],nxt[M],w[M],first[N],idx,flag[N];
void add(int x,int y,int z)
{
v[++idx]=y;
w[idx]=z;
nxt[idx]=first[x];
first[x]=idx;
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push({s,0});
while(!q.empty())
{
node t=q.top();
q.pop();
if(flag[t.v])
{
continue;
}
flag[t.v]=1;
for(int i=first[t.v];i;i=nxt[i])
{
int k=v[i];
if(dis[k]-dis[t.v]>w[i])
{
dis[k]=dis[t.v]+w[i];
q.push({k,dis[k]});
}
}
}
for(int i=1;i<=n;i++)
{
cout<<(dis[i]==0x3f3f3f3f?2147483647:dis[i])<<" ";
}
return 0;
}
dis数组版
#include <bits/stdc++.h>
using namespace std;
const int N=100005,M=500005;
int n,m,s,dis[N],v[M],nxt[M],w[M],first[N],idx,flag[N];
struct cmp
{
bool operator()(int x,int y)
{
return dis[x]>dis[y];
}
};
priority_queue<int,vector<int>,cmp> q;
void add(int x,int y,int z)
{
v[++idx]=y;
w[idx]=z;
nxt[idx]=first[x];
first[x]=idx;
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push(s);
while(!q.empty())
{
int t=q.top();
q.pop();
if(flag[t])
{
continue;
}
flag[t]=1;
for(int i=first[t];i;i=nxt[i])
{
int k=v[i];
if(dis[k]-dis[t]>w[i])
{
dis[k]=dis[t]+w[i];
q.push(k);
}
}
}
for(int i=1;i<=n;i++)
{
cout<<(dis[i]==0x3f3f3f3f?2147483647:dis[i])<<" ";
}
return 0;
}
神犇们帮忙找找问题,谢谢!求求了qwq