HDU 1596

来源:互联网 发布:游族网络 总经理 编辑:程序博客网 时间:2024/05/16 01:56
#include<stdio.h>#define M 10000000#define mm 1005using namespace std;double x,map[mm][mm],dis[mm];int vis[mm],i,j,k,t;int main(){    int n,m,st,en;    while(scanf("%d",&n)!=EOF)    {                for(i=1;i<=n;i++)        {for(j=1;j<=n;++j)            {scanf("%lf",&x);map[i][j]=1-x;}}                scanf("%d",&t);        while(t--)        {           for(i=1;i<=n;i++)             {dis[i]=1.0;vis[i]=0;}               scanf("%d%d",&st,&en);               if(st==en)               {printf("1.000\n");continue;}           dis[st]=0.0;           for(i=1;i<=n;i++)          {            double mi=1.0;            int k=-1;            for(j=1;j<=n;j++)            {              if(!vis[j]&&dis[j]<mi)              {mi=dis[j];k=j;}            }            if(mi==1){break;}            vis[k]=1;            for(j=1;j<=n;++j)              {if(!vis[j]&&dis[j]>dis[k]+(1-dis[k])*map[k][j])                {dis[j]=dis[k]+(1-dis[k])*map[k][j];}              }            }            if((1-dis[en])==0)            printf("What a pity!\n");            else               printf("%.3lf\n",1-dis[en]);        }    }    return 0;}

算不安全的概率:就是第一条路坠毁的概率加上第一条路安全第二条路坠毁的概率, 然后Dij
原创粉丝点击