WA成68pts,感觉自己应该错得很弱智,但是看不出来哪里有问题,求教 dalao 们。
code:
#include<bits/stdc++.h>
#define int long long
#define inf (long long)1e18
using namespace std;
int n,m;
int mp[2005][2005];
int dis[2005],ans[2005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void dijkstra()
{
for(int i = 1;i <= n;i++)dis[i] = inf;
dis[1] = 0;
ans[1] = 1;
q.push(make_pair(0,1));
while(!q.empty())
{
int u = q.top().second;
q.pop();
for(int v = 1;v <= n;v++)
{
int w = mp[u][v];
if(dis[u] + w < dis[v])
{
dis[v] = dis[u] + w;
ans[v] = ans[u];
q.push(make_pair(dis[v],v));
}
else if(dis[u] + w == dis[v])
ans[v] += ans[u];
}
}
return;
}
signed main()
{
freopen("in.txt","r",stdin);
scanf("%lld%lld",&n,&m);
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
mp[i][j] = inf;
while(m--)
{
int u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
if(w < mp[u][v])mp[u][v] = w;
}
dijkstra();
if(dis[n] == inf)
printf("No answer");
else
printf("%lld %lld",dis[n],ans[n]);
return 0;
}