#include<bits/stdc++.h>
using namespace std;
const int MAXN=8e6+10;
int n,m,cnt;
int head[MAXN],vis[MAXN];
long long dist[MAXN];
int mapp[2001][2001];
int ans[MAXN];
struct node{
int nxt,to,w;
}e[MAXN];
struct point{
int id;
long long dis;
friend bool operator < (point a,point b){
return a.dis>b.dis;
}
};
void add(int x,int y,int z){
e[++cnt].nxt=head[x];
e[cnt].to=y;
e[cnt].w=z;
head[x]=cnt;
}
priority_queue<point>q;
void dij(){
ans[1]=1;
memset(dist,0x3f,sizeof(dist));
dist[1]=0;
q.push({1,0});
while(!q.empty()){
int tmp=q.top().id;
q.pop();
if(vis[tmp])
continue;
vis[tmp]=1;
for(int i=head[tmp];i;i=e[i].nxt){
int v=e[i].to;
int w=e[i].w;
if(dist[v]>dist[tmp]+w){
dist[v]=dist[tmp]+w;
q.push({v,dist[v]});
ans[v]=ans[tmp];
}
else if(dist[v]==dist[tmp]+w)
ans[v]+=ans[tmp];
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
if(mapp[x][y]==0){
add(x,y,z);
mapp[x][y]=1;
}
else
continue;
}
dij();
if(dist[n]>9999999999)
cout<<"No answer";
else
cout<<dist[n]<<" "<<ans[n];
return 0;
}
萌新怀疑是不是要特判,求各位大佬指出