joj2535Train Ticket

 2535: Train Ticket


ResultTIME LimitMEMORY LimitRun TimesAC TimesJUDGE
3s 65536K 394 136 Standard

每次出外比赛,火车票的问题就出现了。太多的火车路线使acm的教练Coach Li很迷惘,当然,他总是努力使得总起来的火车票价最少。你能帮助他一下吗?
输入给出n和m,表示有n个城市。之后的m次查询。
之后会跟随(n*n)的数字矩阵,a[i][j] 表示i车站到j车站需要a[i][j]的钱。
注意a[i][j]与a[j][i]无必然联系。
然后是m对整数。如果一对整数i,j。表示求城市i到城市j的最小花费
n<=100; m<=100; 其中城市的标号(0<=i < n);

Sample intput

3 1
0 2 1
1 0 3
1 2 0
1 2

Sample output

2

 

Problem Source: Keenas

 


This problem is used for contest: 124  185  198 


Submit / Problem List / Status / Discuss

 
略水... 
弗洛伊德算法---DP的思想,时间复杂度O(n^3)。
 
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     //freopen("in.txt", "r", stdin);
 6     int n, m, i, j, k, p, q;
 7     int a[105][105];
 8 
 9     while (scanf("%d %d", &n, &m) == 2)
10     {
11 
12         for (i=0; i<n; ++i)
13         {
14             for (j=0; j<n; ++j)
15             {
16                 scanf("%d", &a[i][j]);
17             }
18         }
19 
20         for (k=0; k<n; ++k)
21         {
22             for (i=0; i<n; ++i)
23             {
24                 for (j=0; j<n; ++j)
25                 {
26                     if ((a[i][k]+a[k][j]) < a[i][j])
27                     {
28                         a[i][j] = a[i][k] + a[k][j];
29                     }
30                 }
31             }
32         }
33 
34         while (m--)
35         {
36             scanf("%d %d", &p, &q);
37             printf("%d\n", a[p][q]);
38         }
39     }
40 
41     return 0;
42 }

 

 
 
posted @ 2012-04-17 19:32  漂木  阅读(251)  评论(0编辑  收藏  举报