朴素Dijkstra#2#10TLE求调
查看原帖
朴素Dijkstra#2#10TLE求调
801312
fazeup楼主2024/6/23 22:18
#include<bits/stdc++.h>
using namespace std;
const int N=50100;
int n,m,b,u,v,w,h[N],l,s=1,dis[N];
bool f[N];
struct edge{
	int v,w,next;
}e[200009];

void add(int u,int v,int w){
	e[++l].v=v;
	e[l].w=w;
	e[l].next=h[u];
	h[u]=l;
}

int main(){
	ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>m>>b;
    for(int i=1;i<=m;i++){
    	cin>>u>>v>>w;
    	add(u,v,w);
    	add(v,u,w);
	}
	memset(dis,0x3f,sizeof dis);
	dis[1]=0;
    while(!f[s]){
    	f[s]=1;
    	for(int ne=h[s];ne;ne=e[ne].next){
    		if(dis[e[ne].v]>dis[s]+e[ne].w){
    			dis[e[ne].v]=dis[s]+e[ne].w;
			}
		}
    	s=0;
    	for(int i=1;i<=n;i++){
    		if(!f[i]&&dis[i]<dis[s]){
    			s=i;
			}
		}
	}
    while(b--){
    	cin>>u>>v;
    	cout<<dis[u]+dis[v]<<endl;
	}
    
    
	return 0;
}


2024/6/23 22:18
加载中...