最后两组数据TLE了,**模板是堆优化的dijkstra**,倒数第二组数据提醒的是**输入长度不合法**,但是我看着数组的大小是没问题的,不知道到底是哪里有问题。求dalao们帮忙看看解决一下Orz
(有很多//注释是用来调试的,请忽略)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=200010;
typedef pair<double,int> PII;
int n,m,A,B;
double dist[N];
int h[N],e[N],ne[N],idx;
double w[N];
bool st[N];
void add(int x,int y,double z)
{
e[idx]=y,w[idx]=z,ne[idx]=h[x],h[x]=idx++;
}
double dijkstraII()
{
memset(dist,0,sizeof dist);
dist[A]=1;
priority_queue<PII,vector<PII>> heap;
heap.push({1,A});
while(!heap.empty())
{
auto t = heap.top();
heap.pop();
int ver=t.second;double distance = t.first;
for(int i=h[ver];i!=-1;i=ne[i])
{
int j=e[i];
if(dist[j]<distance*w[i])
{
dist[j]=distance*w[i];
heap.push({dist[j],j});
st[j]=true;
}
}
}
return dist[B];
}
int main()
{
scanf("%d%d",&n,&m);
memset(h,-1,sizeof h);
int a,b,c;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,1-c*0.01),add(b,a,1-c*0.01);
}
scanf("%d%d",&A,&B);
printf("%.8f",100 / dijkstraII());
return 0;
}