1
/*
大概就是在两点间最短路径的基础上的一点修改
2
*求出两点间的单路径最大流
3
*需要注意的是导游必须在车上,所以会占掉一个乘客的位置
4
*在最后进行计算时要将导游的位置减掉
5
*
6
*
7
*
8
*
9
*
10
*
11
*
12
*/
13
14
#include
<iostream>
15
#include
<memory.h>
16
#include
<queue>
17
#include
<math.h>
18
using
namespace std;
19
int rd[
110][
110];
20
int vi[
110];
21
int fl[
110];
22
int c,n,s,e,d;
23
int ans;
24
void sol()
25 {
26
int tem=
0;
27 vi[s]=
1;
28
for(
int i=
1;i<=c;i++)
29
if(rd[s][i]!=
0)
30 fl[i]=rd[s][i];
31
for(
int i=
1;i<c;i++)
32 {
33
int max=
0;
34
int p,f;
35
for(
int j=
1;j<=c;j++)
36 {
37
if(vi[j]==
0&&max<=fl[j])
38 {
39 max=fl[j];
40 p=j;
41 }
42 }
43 fl[p]=max;
44 vi[p]=
1;
45
// cout<<"p "<<p<<endl;
46
47
for(
int j=
1;j<=c;j++)
48
if(vi[j]==
0&&rd[p][j]!=
0)
49 {
50 max=fl[p];
51
if(rd[p][j]<fl[p])
52 max=rd[p][j];
53
// cout<<"j:"<<j<<" : "<<max<<endl;
54
if(fl[j]<max)
55 fl[j]=max;
56 }
57
// for(int j=1;j<=c;j++)
58
// cout<<fl[j]<<" ";
59
// cout<<endl;
60 }
61 }
62
int main()
63 {
64
int t;
65 cin>>t;
66
while(t--)
67 {
68 memset(vi,
0,
sizeof(vi));
69 memset(rd,
0,
sizeof(rd));
70 memset(fl,
0,
sizeof(fl));
71
72 cin>>c>>n;
73
while(n--)
74 {
75
int a,b,e;
76 cin>>a>>b>>e;
77 rd[a][b]=e;
78 rd[b][a]=e;
79 }
80 cin>>s>>e>>d;
81 sol();
82
// for(int i=1;i<=c;i++)
83
// cout<<fl[i]<<" ";
84
// cout<<endl;
85
// cout<<fl[e]<<endl;
86
int an=ceil((
double)(
double)d/(
double)(fl[e]-
1));
87 cout<<an<<endl;
88 }
89 }
转载于:https://www.cnblogs.com/congzc/archive/2011/05/14/2329967.html