P4479求助!
  • 板块学术版
  • 楼主lijunxi_luqiao
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/9 19:05
  • 上次更新2024/8/9 20:14:27
查看原帖
P4479求助!
1006406
lijunxi_luqiao楼主2024/8/9 19:05

预先声明:本人蒟蒻

一个用了vector的堆优化Dijkstra不知为何TLE了

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct node{int x,d;};
int n,m,s,dis[100005]; bool vis[100005];
vector<node> v[100005];
bool operator >(const node &x,const node &y)
{
    return x.d>y.d;
}
bool operator <(const node &x,const node &y)
{
    return x.d<y.d;
}
priority_queue<node,vector<node>,greater<node> > q;
void dijkstra(int s)
{
    memset(vis,0,sizeof(vis));
    for(int i=0;i<=n;i++) dis[i]=INT_MAX;
    q.push(node{s,0});
    dis[s]=0;
    while(!q.empty())
    {
        node now=q.top();
        q.pop();
        vis[now.x]=1;
        for(int i=0;i<v[now.x].size();i++)
        {
            if(!vis[v[now.x][i].x]&&dis[v[now.x][i].x]>dis[now.x]+v[now.x][i].d)
            {
                dis[v[now.x][i].x]=dis[now.x]+v[now.x][i].d;
                q.push(node{v[now.x][i].x,dis[v[now.x][i].x]});
            }
        }
    }
}
int main()
{
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        v[x].push_back(node{y,z});
    }
    dijkstra(s);
    for(int i=1;i<=n;i++)
        cout<<dis[i]<<" ";
    return 0;
}

望相助!

2024/8/9 19:05
加载中...