1 条题解

  • 0
    @ 2024-11-12 20:17:32

    标准的dijkstra

    !!注意优先队列一定要重载运算符

    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int N=1e5;
    struct edge{
    	int to,w,nxt;
    }t[N];
    int head[N],dis[N];
    int tot;
    void addedge(int u,int v,int w){
    	t[++tot].nxt=head[u];
    	t[head[u]=tot].to=v;
    	t[tot].w=w;
    	return ;
    }
    struct node{
        int dis,u;
        bool operator<(const node&x)const{
            return x.dis<dis;
        }
    };
    int n;
    bool vis[N];
    priority_queue<node>q;
    void dijkstra(int s){
    	memset(dis,0x3f,sizeof(dis));
    	memset(vis,0,sizeof(vis));
    	dis[s]=0;
    	q.push({0,s});
    	while(!q.empty()){
    		int u=q.top().u;
    		q.pop();
    		if(vis[u])continue;
    		vis[u]=true;
    		for(int i=head[u];i;i=t[i].nxt){
    			int v=t[i].to,w=t[i].w;
    			if(dis[v]>dis[u]+w){
    				dis[v]=dis[u]+w;
    				q.push({dis[v],v});
    			}
    		}
    	}
        cout<<dis[n]<<'\n';
    	return ;
    }
    int main(){
    	ios::sync_with_stdio(0);
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		for(int j=i+1; j<=n; j++){
    			int w;
    			cin>>w;
    			addedge(i,j,w);
    		}
    	}
    	dijkstra(1);
    	return 0;
    }
    
    • 1

    信息

    ID
    5417
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    12
    已通过
    8
    上传者