22分求调
查看原帖
22分求调
1593045
Yimuhao1205楼主2025/8/5 15:29
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int v,w;
};
bool operator < (Node a,Node b){
	return a.w>b.w;
}
priority_queue<Node>q;  
int n,b,dis[200005],cnt[200005];
bool y[200005];
vector<Node>m[200005];
void dijkstra(){
	for(int i=1;i<=n;i++) dis[i]=0x3f3f3f3f,y[i]=0,cnt[i]=0;
	q.push({1,0});dis[1]=0;
	while(!q.empty()){
		Node net=q.top();q.pop();
		if(y[net.v]) continue;
		y[net.v]=1;
		for(int i=0;i<m[net.v].size();i++){
			int v=m[net.v][i].v;
			if(dis[v]>dis[net.v]+m[net.v][i].w) dis[v]=dis[net.v]+m[net.v][i].w,cnt[v]=1;
			else if(dis[v]==dis[net.v]+m[net.v][i].w) cnt[v]+=cnt[net.v];
			if(y[v]==0) q.push({v,dis[v]});
		}
	}
}
void push(int u,int v,int w){
	for(int i=0;i<m[u].size();i++){
		if(m[u][i].v==v){
			m[u][i].w=min(m[u][i].w,w);
			return;
		}
	}
	m[u].push_back({v,w});
}
int main(){
	cin>>n>>b;
	for(int i=1,u,v,w;i<=b;i++){
		cin>>u>>v>>w;
		push(u,v,w);
		push(v,u,w);
	}
	dijkstra();
	cout<<dis[n]<<" "<<cnt[n];
	return 0;
}
2025/8/5 15:29
加载中...