蒟蒻的自我拯救。。。
#include<stdio.h>
#include<string.h>
#define INF 10000000
int map[1001][1001];
int vis[1001];
int dis[1001];
int n,m;
int dp[1001];
void dijkstra(int st)
{
int i,j,k;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
{
if(i==st)
dis[i]=0;
else
dis[i]=INF;
}
for(i=1;i<=n;i++)
{
int r;
int min=INF;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<min)
{
min=dis[j];
r=j;
}
}
vis[r]=1;
for(k=1;k<=n;k++)
{
if(dis[k]>dis[r]+map[r][k])
dis[k]=dis[r]+map[r][k];
}
}
return;
}
int DFS(int st)
{
int sum=0;
if(dp[st]!=-1)
return dp[st];
if(st==2)
return 1;
for(int i=1;i<=n;i++)
{
if(map[st][i]!=INF&&dis[st]>dis[i])
sum+=DFS(i);
}
dp[st]=sum;
return dp[st];
}
int main()
{
int i,j,u,v,w;
while(scanf("%d",&n)!=EOF&&n)
{
for(i=1;i<=n;i++)
{
dp[i]=-1;
for(j=1;j<=n;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
}
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
map[u][v]=map[v][u]=w;
}
dijkstra(2);
printf("%d\n",DFS(1));
}
return 0;
}