package algorithm;
import java.util.Scanner;
public class test {
static int n,m,p,a,b,G[][],t[],x,y,z;
static double dp[][],INF=Double.MAX_VALUE;
public static double solve() {
double ans=INF;
for(int s=(1<<n)-1;s>=0;--s) {
if(dp[s][b]>=0&&dp[s][b]!=INF) {
ans=Math.min(ans, dp[s][b]);
}
for(int u=1;u<=m;++u) {
for(int i=0;i<n;i++) {
if(((s>>i)&1)==1) {
for(int v=1;v<=m;v++) {
if(G[u][v]>0)
//System.out.println(dp[s][u]+G[u][v]/t[i]);
dp[s&~(1<<i)][v]=Math.min(dp[s&~(1<<i)][v], dp[s][u]+(double)G[u][v]/t[i]);
}
}
}
}
}
return ans;
}
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
while(true) {
n=sc.nextInt();
if(n==0)
return;
m=sc.nextInt();
p=sc.nextInt();
a=sc.nextInt();
b=sc.nextInt();
G=new int[m+1][m+1];
dp=new double[(1<<n)][m+1];
t=new int[n];
for(int i=0;i<=m;++i) {
for(int j=0;j<=m;++j) {
G[i][j]=-1;
}
}
for(int i=0;i<(1<<n);i++) {
for(int j=0;j<=m;++j) {
dp[i][j]=INF;
}
}
dp[(1<<n)-1][a]=0;
for(int i=0;i<n;i++) {
t[i]=sc.nextInt();
}
for(int i=0;i<p;i++) {
x=sc.nextInt();
y=sc.nextInt();
z=sc.nextInt();
G[x][y]=z;
G[y][x]=z;
}
double ans=0;
ans=solve();
if(ans!=INF) {
System.out.println(solve());
}else {
System.out.println("Impossible");
}
}
}
}
poj2686
最新推荐文章于 2020-07-29 16:11:05 发布