0分求助
查看原帖
0分求助
428690
Astatinear楼主2021/8/15 16:08

过了样例,但是却是0分

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int m,n,k1,k2;
int fst[500005];
int last[500005];
int vis[500005];
double dis[500005];
int cnt;
struct xytsb
{
    int u,nxt;
    double v;
}arr[500005];
void adds(int r,int l,int w)
{
    arr[++cnt].u=l,arr[cnt].v=1.0-w/100.0,arr[cnt].nxt=fst[r],fst[r]=cnt;
}
void Dijkstra(int k1)
{
    memset(dis,0,sizeof(vis));
    vis[k1]=1;
    dis[k1]=1.0;
    for(int i=1;i<m;++i)
    {
        for(int j=fst[k1];j;j=arr[j].nxt)
        {
            int tmp=arr[j].u;
            if(dis[k1]*arr[j].v>dis[tmp])
            {
                dis[tmp]=dis[k1]*arr[j].v;
                last[tmp]=k1;
            }
        }
        int mid=0x3f3f3f3f;
        for(int j=1;j<=m;++j)
        {
            if(vis[j]==0&&dis[j]<mid)
            mid=dis[j],k1=j;
        }
        vis[k1]=1;
        if(k1==k2)
        {
            return;
        }
    }
}
int main()
{
    cin>>m>>n;
    for(int i=1;i<=n;++i)
    {
        int x,y,z;
        cin>>x>>y>>z;
        adds(x,y,z);
        adds(y,x,z);
    }
    cin>>k1>>k2;
    Dijkstra(k1);
    printf("%.8lf\n",100/dis[k2]);
}
2021/8/15 16:08
加载中...