社区讨论

标准dijkstra

P4779【模板】单源最短路径(标准版)参与者 8已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mi6vl932
此快照首次捕获于
2025/11/20 11:32
4 个月前
此快照最后确认于
2025/11/20 11:32
4 个月前
查看原帖
然而全TLE
请大佬看看哪里可以优化
CPP
#include<bits/stdc++.h>
using namespace std;

const int Max_n=100010,Max_m=200010,Max_int=2147483647;

struct Edge
{
    int to;
    int len;
    int next;
}edge[Max_m];

int n,m,s,now,mn;
int arrive,leave,length,num;
int ans[Max_n],last[Max_n];
bool Visit[Max_n];

void input(int a,int b,int c)
{
    num++;
    edge[num].to=b;
    edge[num].len=c;
    edge[num].next=last[a];
    last[a]=num;
}

int main()
{
    cin>>n>>m>>s;
    for(int i=1;i<=n;i++) ans[i]=2147483647;
    for(int i=0;i<m;i++)
    {
        cin>>arrive>>leave>>length;
        input(arrive,leave,length);
    }
    
    int now=s;
    ans[s]=0;
    while(!Visit[now])
    {
        Visit[now]=true;
        for(int i=last[now];i!=0;i=edge[i].next)
        {
            if(!Visit[edge[i].to] && ans[edge[i].to]>ans[now]+edge[i].len)
                ans[edge[i].to]=ans[now]+edge[i].len;
        }
        mn=Max_int;
        for(int i=1;i<=n;i++)
            if(!Visit[i] && mn>ans[i])
            {
                mn=ans[i];
                now=i;
            }
    }
    
    for(int i=1;i<=n;i++) cout<<ans[i]<<' ';
    return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...