60分求助!!!
  • 板块P1608 路径统计
  • 楼主fhrd
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/6/18 17:59
  • 上次更新2023/10/23 12:49:27
查看原帖
60分求助!!!
621227
fhrd楼主2023/6/18 17:59
#include<bits/stdc++.h>
using namespace std;
const int INF=2147483647;
int n,m,x,y,z,d[100001],v[100001],ans,anss=-1e3,s[10001];
struct node{
	int to,w,nxt; 
}e[500001];
int head[100001],tot;
void add(int x,int y,int z){
	++tot;
	e[tot].to=y;
	e[tot].w=z;
	e[tot].nxt=head[x];
	head[x]=tot;
}
typedef pair<int,int>Pair;
priority_queue<Pair,vector<Pair>,greater<Pair> >q;
void di(){
	for(int i=0;i<=n;i++) d[i]=INF,s[i]=INF;
	d[1]=0;
	s[1]=1;
	q.push(make_pair(0,1));
//	v[s]=1;
	while(!q.empty()) {
		int x1=q.top().second;
		q.pop();
		if(v[x1]) continue;
		v[x1]=1;
		for(int j=head[x1];j;j=e[j].nxt) {
			int y=e[j].to;
			if(d[y]>d[x1]+e[j].w) {
				d[y]=min(d[y],d[x1]+e[j].w);
				s[y]=s[x1];
				q.push(make_pair(d[y],y));
			}else if(d[y]==d[x1]+e[j].w) s[y]+=s[x1];
		}
	}
}
int main() {
	cin>>n>>m;
	for(int i=1;i<=m;i++) {
		cin>>x>>y>>z;
		add(x,y,z);
	}
	di();
	if(s[n]==2147483647) cout<<"No answer";
	else cout<<d[n]<<' '<<s[n];
	return 0;
}
2023/6/18 17:59
加载中...