HDU--1142

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142

分析:最短路+记忆化搜索。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<vector>
 7 #include<queue>
 8 #define ll long long
 9 #define inf 0x6fffffff
10 #define maxn 1005
11 using namespace std;
12 struct edge
13 {
14     int to,time;
15     edge(int x,int y)
16     {
17         to=x;time=y;
18     }
19 };
20 vector<edge>e[maxn];
21 queue<int>q;
22 bool vis[maxn];
23 int d[maxn],n,m,p[maxn];
24 void spfa(const int s)
25 {
26     while(!q.empty())q.pop();
27     for(int i=1;i<=n;i++)
28     {
29         d[i]=inf;
30         vis[i]=false;
31     }
32     d[s]=0;vis[s]=true;
33     q.push(s);
34     while(!q.empty())
35     {
36         int u=q.front();q.pop();
37         for(int i=0;i<e[u].size();i++)
38         {
39             if(d[e[u][i].to]>d[u]+e[u][i].time)
40             {
41                 d[e[u][i].to]=d[u]+e[u][i].time;
42                 if(!vis[e[u][i].to])
43                 {
44                     vis[e[u][i].to]=true;
45                     q.push(e[u][i].to);
46                 }
47             }
48         }
49         vis[u]=false;
50     }
51 }
52 int dfs(int s)//记忆化搜索 
53 {
54     if(p[s])return p[s];
55     if(s==2)return 1;
56     int sum=0;
57     for(int i=0;i<e[s].size();i++)
58     {
59         if(d[s]>d[e[s][i].to])
60         {
61             if(p[e[s][i].to])sum+=p[e[s][i].to];
62             else sum+=dfs(e[s][i].to);
63         }
64     }
65     p[s]=sum;
66     return sum;
67 }
68 int main()
69 {
70     while(~scanf("%d",&n),n)
71     {
72         for(int i=0;i<maxn;i++)e[i].clear();
73         scanf("%d",&m);
74         int u,v,t,ans=0;
75         for(int i=0;i<m;i++)
76         {
77             scanf("%d%d%d",&u,&v,&t);
78             e[u].push_back(edge(v,t));
79             e[v].push_back(edge(u,t));
80         }
81         spfa(2);
82         memset(p,0,sizeof(p));
83          ans=dfs(1);
84         printf("%d
",ans);
85     }
86     return 0;
87 }
View Code
原文地址:https://www.cnblogs.com/i-love-acm/p/3288388.html