1 条题解

  • 0
    @ 2023-10-18 20:40:08

    跑一边最短路即可

    #include<iostream>
    #include<queue>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    typedef long long LL;
    #define _P(A) A=-~A
    #define fione(i,a,b) for(register int i=a;i<=b;_P(i))
    const int NUMBER1=2500,NUMBER2=6200;
    struct EDGE{
    	int to,w;
    	EDGE *next;
    	EDGE(){next=nullptr;}
    }e[(NUMBER2<<1)+5],*head[NUMBER1+5];
    int tot(0),n,m;
    LL dis[NUMBER1+5];
    bool visit[NUMBER1+5];
    inline void add(const int &u,const int &v,const int &w){EDGE *p=&e[++tot];p->to=v,p->w=w,p->next=head[u];head[u]=p;}
    inline void bfs(const int &begin){
    	std::priority_queue<std::pair<LL,int>,std::vector<std::pair<LL,int> >,std::greater<std::pair<LL,int> > >q;
    	memset(dis,0x7f7f7f,sizeof(dis));
    	dis[begin]=0;q.push(std::make_pair(0LL,begin));
    	while(!q.empty()){
    		int u=q.top().second;q.pop();
    		if(visit[u])continue;
    		visit[u]=true;
    		for(EDGE *i=head[u];i;i=i->next)if(dis[i->to]>dis[u]+i->w){
    			dis[i->to]=dis[u]+i->w;
    			if(!visit[i->to])q.push(std::make_pair(dis[i->to],i->to));
    		}
    	}
    }
    signed main(){
    	int s,t;
    	std::cin>>n>>m>>s>>t;
    	for(register int a,b,c;m--;){
    		std::cin>>a>>b>>c;
    		add(a,b,c);add(b,a,c);
    	}
    	bfs(s);
    	std::cout<<dis[t];
    	return 0;
    }
    
    • 1

    信息

    ID
    3408
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    3
    上传者