wa了5,6,7,9
#include<iostream>
#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
#include<fstream>
using namespace std;
const int N=2010,inf=0x3f3f3f3f;
int n,m,s,t,ans=inf,book[N],dis[N],vis[N][N],cnt[N];
struct pp
{
int u,d;
};
pp m_p(int u,int d) {pp a; a.u=u; a.d=d; return a;}
bool operator <(const pp &a, const pp &b)
{
return a.d>b.d;
}
vector<pp>dg[N];
void dij(int nod);
int main()
{
//freopen("P1608_5.in","r",stdin);
//freopen("P2296.out","w",stdout);
memset(vis,0x3f,sizeof vis);
cin>>n>>m;
for(int i=1; i<=m; i++)
{
int a,b,d; cin>>a>>b>>d;
//if(vis[a][b]<=d) continue;
vis[a][b]=min(vis[a][b],d);
//dg[b].push_back(m_p(a,d));
//dg[a].push_back(m_p(b,d));
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
if(vis[i][j]!=inf) dg[i].push_back(m_p(j,vis[i][j]));
}
s=n;
dij(1);
if(dis[s]==inf) cout<<"No answer"<<endl;
else cout<<dis[s]<<" "<<cnt[s];
//cout<<dis[t]<<endl;
//for(int i=1; i<=n; i++) cout<<dis[i]<<endl;
cin>>n;
}
void dij(int nod)
{
memset(dis,0x3f,sizeof dis); dis[nod]=0;
memset(book,0,sizeof book);
memset(cnt,0,sizeof cnt);
priority_queue<pp>q;
q.push(m_p(nod,0)); cnt[nod]=1; book[nod]=1;
while(q.size())
{
//cout<<"asf"<<endl;
pp now=q.top(); q.pop();
int u=now.u, d=now.d; //book[u]=0;
if(u==s) continue;
//vector<int>g[N];
for(int i=0; i<dg[u].size(); i++)
{
int v=dg[u][i].u,l=dg[u][i].d; //cout<<v<<endl;
if(dis[v]>=l+d)
{
//g[v].push_back(l);
dis[v]=l+d; cnt[v]+=cnt[u];
if(book[v]) continue;
book[v]=1;
q.push(m_p(v,dis[v]));
}
}
// if(u!=s) cnt[u]=0;
}
return ;
}