急急急!!!为什么全RE???
查看原帖
急急急!!!为什么全RE???
889828
Wangbingxiang楼主2024/10/22 23:03
#include<bits/stdc++.h>
using namespace std;
const long long N = 1000010;
const long long inf = 0x3f3f3f3f;
long long n,m,b;
long long x,y,z;
long long head[N*2],tot,vis[N],dis[N];
struct Edge{
	long long to,nxt,w;
}e[N*2];
void add(long long u,long long v,long long w){
	e[++tot].to=v;
	e[tot].nxt=head[u];
	e[tot].w=w;
	head[u]=tot;
}
struct Node{
	long long dis;
	long long idx;
	bool operator < (const Node &tmp) const {
		tmp.dis < dis;
	}
};
priority_queue <Node> q;
void d(){
	dis[1]=0;
	q.push({0,1});
	vis[1]=1;
	while(!q.empty()){
		Node tmp=q.top();q.pop();
		long long u=tmp.idx;
		vis[u]=0;
		for(long long i=head[u];i;i=e[i].nxt){
			long long v=e[i].to;
			if(dis[u]+e[i].w<dis[v]){
				dis[v]=dis[u]+e[i].w;
				if(!vis[v]){
					vis[v]=1;
					q.push({dis[v],v});
				}
			}
		}
	}
}
int main(){
	scanf("%lld%lld%lld",&n,&m,&b);
	for(long long i=1;i<=n;++i) dis[i]=inf;
	for(long long i=1;i<=m;++i){
		scanf("%lld%lld%lld",&x,&y,&z);
		add(x,y,z);
		add(y,x,z);
	}
	d();
	while(b--){
		scanf("%lld%lld",&x,&y);
		cout<<dis[x]+dis[y]<<endl;
	}
	return 0;
}

2024/10/22 23:03
加载中...