#include <bits/stdc++.h>
using namespace std;
struct node
{
int id;
double cc;
friend bool operator<(const node &x,const node &y)
{
return x.cc<y.cc;
}
};
priority_queue<node>q;
struct edge
{
int to;
double cost;
};
vector<edge>G[100010];
int n,m,a1,s,a,b2;
double dist[2010];
void dij()
{
for(int i=1;i<=n;i++)
{
dist[i]=100000000;
}
dist[s]=100;
node st;
st.cc=0;
st.id=s;
q.push(st);
while(!q.empty())
{
node now=q.top();
q.pop();
int v=now.id;
if(dist[v]<now.cc)
{
continue;
}
for(int i=0;i<G[v].size();i++)
{
edge e=G[v][i];
double cost = dist[v] / e.cost;
if(dist[e.to]>cost)
{
dist[e.to]=cost;
node nxt;
nxt.cc=dist[e.to];
nxt.id=e.to;
q.push(nxt);
}
}
}
}
int main()
{
//freopen("P1576_1.in","r",stdin);
cin>>n>>m;
//printf("%d, %d\n", n, m);
for(int i=1;i<=m;i++)
{
double c;
edge b;
cin>>a>>b2>>c;
// printf("%d, %d\n", a, b2);
// if(a == b2)
// {
// continue;
// }
b.to=a;
b.cost=(1-c/100);
G[b2].push_back(b);
b.to=b2;
G[a].push_back(b);
}
cin>>a1>>s;
// printf("%d\n", G[s].size());
dij();
printf("%.8f",dist[a1]);
return 0;
}
不开O2 1.2s 开了357ms 求助优化!