测试的结果都是对的,只是RE,与机房里另一个同学讨论后仍然解决不了,估计是某个细节导致趋势,希望大佬帮忙
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
struct node{
int to,l;
node(int a,int b) : to(a),l(b){
}
bool operator < (node b) const{
return l > b.l;
}
};
int n,m;
vector <node> g[N];
int dist[N];
int dp[N];
void dijstra(){
memset(dist,0x3f,sizeof(dist));
priority_queue<node> q;
dist[2]=0;
q.push(node(2,dist[2]));
while(!q.empty()){
int t=q.top().to,d=q.top().l;
q.pop();
if(d>dist[t]) continue;
for(int i=0;i<g[t].size();i++){
if(dist[g[t][i].to]>dist[t]+g[t][i].l){
dist[g[t][i].to]=dist[t]+g[t][i].l;
q.push(node(g[t][i].to,dist[g[t][i].to]));
}
}
}
}
int dfs(int u){
if(dp[u]) return dp[u];
for(int i=0;i<g[u].size();i++){
int v=g[u][i].to;
if(dist[u]>dist[v]){
dfs(v);
dp[u]+=dp[v];
}
}
}
int ans[N];
int cnt=0;
int main(){
while(scanf("%d",&n) && n!=0){
memset(dist,0x3f,sizeof(dist));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
g[i].clear();
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u].push_back(node(v,w));
g[v].push_back(node(u,w));
}
dijstra();
dp[2]=1;
dfs(1);
cout<<dp[1]<<endl;
}
return 0;
}