3268

 
  
1 // include file
2 #include < cstdio >
3 #include < cstdlib >
4 #include < cstring >
5 #include < cmath >
6 #include < cctype >
7 #include < ctime >
8
9 #include < iostream >
10 #include < sstream >
11 #include < fstream >
12 #include < iomanip >
13 #include < bitset >
14 #include < strstream >
15
16 #include < algorithm >
17 #include < string >
18 #include < vector >
19 #include < queue >
20 #include < set >
21 #include < list >
22 #include < functional >
23
24 using namespace std;
25
26 // typedef
27 typedef long long LL;
28 typedef unsigned long long ULL;
29 typedef __int64 Bint;
30
31 //
32 #define read freopen("in.txt","r",stdin)
33 #define write freopen("out.txt","w",stdout)
34 #define FORi(a,b,c) for(int i=(a);i<(b);i+=c)
35 #define FORj(a,b,c) for(int j=(a);j<(b);j+=c)
36 #define FORk(a,b,c) for(int k=(a);k<(b);k+=c)
37 #define FORp(a,b,c) for(int p=(a);p<(b);p+=c)
38 #define FORii(a,b,c) for(int ii=(a);ii<(b);ii+=c)
39 #define FORjj(a,b,c) for(int jj=(a);jj<(b);jj+=c)
40 #define FORkk(a,b,c) for(int kk=(a);kk<(b);kk+=c)
41
42 #define FF(i,a) for(int i=0;i<(a);i+++)
43 #define FFD(i,a) for(int i=(a)-1;i>=0;i--)
44 #define Z(a) (a<<1)
45 #define Y(a) (a>>1)
46
47 const double eps = 1e - 6 ;
48 const double INFf = 1e10;
49 const int INFi = 1000000000 ;
50 const double Pi = acos( - 1.0 );
51
52 template < class T > inline T sqr(T a){ return a * a;}
53 template < class T > inline T TMAX(T x,T y)
54 {
55 if (x > y) return x;
56 return y;
57 }
58 template < class T > inline T TMIN(T x,T y)
59 {
60 if (x < y) return x;
61 return y;
62 }
63 template < class T > inline void SWAP(T & x,T & y)
64 {
65 T t = x;
66 x = y;
67 y = t;
68 }
69 template < class T > inline T MMAX(T x,T y,T z)
70 {
71 return TMAX(TMAX(x,y),z);
72 }
73
74
75 // code begin
76 #define MAXN 1010
77 int mp1[MAXN][MAXN];
78 int mp2[MAXN][MAXN];
79 int dst[MAXN];
80 bool used[MAXN];
81 int at[MAXN];
82 int N,M,X;
83
84
85 void SP_dijkstra( int st, int mp[][MAXN])
86 {
87 memset(used, 0 , sizeof (used));
88 used[st] = true ;
89 FORi( 1 ,N + 1 , 1 )
90 {
91 if (mp[st][i] != 0 ) dst[i] = mp[st][i];
92 else dst[i] = INFi;
93 }
94
95 int k;
96 int kmin;
97 do
98 {
99 k = - 1 ;
100 kmin = INFi;
101 FORi( 1 ,N + 1 , 1 )
102 {
103 if ( ! used[i])
104 {
105 if (dst[i] < kmin)
106 {
107 kmin = dst[i];
108 k = i;
109 }
110 }
111 }
112
113 if (k ==- 1 ) break ;
114 at[k] += kmin;
115 used[k] = true ;
116 FORi( 1 ,N + 1 , 1 )
117 {
118 if ( ! used[i])
119 {
120 if (mp[k][i] != 0 )
121 {
122 if ( dst[k] + mp[k][i] < dst[i] )
123 dst[i] = dst[k] + mp[k][i];
124 }
125 }
126 }
127 } while ( true );
128
129 }
130
131 int main()
132 {
133 read;
134 write;
135 int s,e,t;
136 while (scanf( " %d %d %d " , & N, & M, & X) !=- 1 )
137 {
138 memset(mp1, 0 , sizeof (mp1));
139 memset(mp2, 0 , sizeof (mp2));
140 while (M -- )
141 {
142 scanf( " %d %d %d " , & s, & e, & t);
143 mp1[s][e] = t;
144 mp2[e][s] = t;
145 }
146 memset(at, 0 , sizeof (at));
147 SP_dijkstra(X,mp1);
148 SP_dijkstra(X,mp2);
149 int ans = 0 ;
150 FORi( 1 ,N + 1 , 1 )
151 {
152 if (at[i] > ans)
153 ans = at[i];
154 }
155 printf( " %d\n " ,ans);
156 }
157 return 0 ;
158 }

转载于:https://www.cnblogs.com/ac2012/archive/2011/03/09/1979001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值