#include<bits/stdc++.h>
using namespace std;
const long long N=100005;
const long long inf=0x3f3f3f3f3f3f3f3f;
struct edge
{
long long v, w;
};
struct node {
long long dis, u;
bool operator>(const node& a) const { return dis > a.dis; }
};
vector<edge> e[N];
long long dis[N], vis[N],cnt[N];
priority_queue<node, vector<node>, greater<node> > q;
void dijkstra(long long n, long long s)
{
memset(dis, 63, sizeof(dis));
dis[s] = 0;
q.push({0, s});
while (!q.empty())
{
long long u = q.top().u;
q.pop();
if (vis[u]) continue;
vis[u] = 1;
for (auto ed : e[u])
{
long long v = ed.v, w = ed.w;
if (dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
cnt[v] = cnt[u];
q.push({dis[v], v});
}else if (dis[v] == dis[u] + w){
cnt[v] = cnt[v]+cnt[u];
}
}
}
}
int main()
{
long long n,m;
cin >> n >> m;
for (long long i = 1; i <= m; i++)
{
long long u,v,w;
cin >> u >> v >> w;
e[u].push_back({v,w});
}
cnt[1] = 1;
dijkstra(n,1);
if(dis[n]==4557430888798830399){
cout << "No answer" << endl;
}else{
cout << dis[n] << ' ' << cnt[n] << endl;
}
return 0;
}
奖一个关注~~~