#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005
struct edge
{
long long v,w;
};
struct node
{
long long dis,u;
bool operator>(const node& a)const
{
return dis > a.dis;
}
};
vector<edge> e[MAXN];
long long dis[MAXN],vis[MAXN];
priority_queue<node,vector<node>,greater<node> > q;
int main()
{
long long n,m,s,u,v,l;
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>l;
e[u].push_back({v,l});
}
memset(dis,0x3f,(n+1)*sizeof(long long));
memset(vis,0,(n+1)*sizeof(long long));
dis[s]=0;
q.push({0,s});
while(!q.empty())
{
long long u=q.top().u;
q.pop();
if(vis[u])
continue;
vis[u]=1;
for(auto ed : e[u])
{
long long v=ed.v,w=ed.w;
if(dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
q.push({dis[v],v});
}
}
}
for(int i=1;i<=n;i++)
{
/*if(dis[i]==0x3f)
{
cout<<2147483647<<" ";
continue;
}*/
cout<<dis[i]<<" ";
}
cout<<endl;
return 0;
}
这是90分的代码
可是,如果把最后注释掉的内容放入代码,即
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005
struct edge
{
long long v,w;
};
struct node
{
long long dis,u;
bool operator>(const node& a)const
{
return dis > a.dis;
}
};
vector<edge> e[MAXN];
long long dis[MAXN],vis[MAXN];
priority_queue<node,vector<node>,greater<node> > q;
int main()
{
long long n,m,s,u,v,l;
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>l;
e[u].push_back({v,l});
}
memset(dis,0x3f,(n+1)*sizeof(long long));
memset(vis,0,(n+1)*sizeof(long long));
dis[s]=0;
q.push({0,s});
while(!q.empty())
{
long long u=q.top().u;
q.pop();
if(vis[u])
continue;
vis[u]=1;
for(auto ed : e[u])
{
long long v=ed.v,w=ed.w;
if(dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
q.push({dis[v],v});
}
}
}
for(int i=1;i<=n;i++)
{
if(dis[i]==0x3f)
{
cout<<2147483647<<" ";
continue;
}
cout<<dis[i]<<" ";
}
cout<<endl;
return 0;
}
就变成了60分
求调