zoukankan      html  css  js  c++  java
  • 「题解」:[概率与期望]:游走

    盲目建双边,爆零两行泪。

    其实这道题没必要前向星建图,甚至于不用建图。只有我傻了吧唧的吭哧吭哧建了半天。

    主要思路就是高斯消元处理出每个点期望经过的次数,然后转化成边的期望经过次数,sort一波按顺序赋值相加就可以了。建边反而会造成搜边的时候爆掉的尴尬情况。具体不说了。不可描述……(后来w90数组开小了(╥╯^╰╥)嘤嘤嘤~)

     

    (不一定每一个以图为背景的题目都必须用图论知识打)

     

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int in_n,in_m,in_u[500005],in_v[500005],tot,first[50003];
    int du[50003];
    bool te;
    double dvp[50003],map[5003][5003],qwq[500005],ans;
    inline void gauss()
    {
        for(register int i=1;i<=in_n;++i)
        {
            int flag=i;
            for(register int j=1;j<=in_n;++j)
            {
                if(fabs(map[j][i])>fabs(map[j][flag]))
                    flag=j;
            }
            if(map[flag][i]==0)
            {
                te=true;
                continue;
            }
            double del=map[flag][i];
            for(register int j=1;j<=in_n+1;++j)
            {
                swap(map[i][j],map[flag][j]);
                map[i][j]/=del;
            }
            for(register int j=1;j<=in_n;++j)
            {
                if(i==j)continue;
                del=map[j][i];
                for(int k=i;k<=in_n+1;k++)
                    map[j][k]-=map[i][k]*del;
            }
        }
    }
    inline bool cmp(double a,double b){return a>b;}
    int main()
    {
        scanf("%d %d",&in_n,&in_m);
        for(register int i=1;i<=in_m;++i)
        {
            scanf("%d %d",&in_u[i],&in_v[i]);
            du[in_u[i]]++;du[in_v[i]]++;
        }
        for(register int i=1;i<=in_n;++i)
        {
            dvp[i]=1.0/(double)du[i];
            map[i][i]=-1.0;
        }
        for(register int i=1;i<=in_m;++i)
            map[in_u[i]][in_v[i]]+=dvp[in_v[i]],
            map[in_v[i]][in_u[i]]+=dvp[in_u[i]];
        for(register int i=1;i<=in_n;++i)
            map[in_n][i]=0.0;
        map[in_n][in_n]=1.0;map[1][in_n+1]=-1.0;
        gauss();
        for(register int i=1;i<=in_m;++i)
            qwq[i]=map[in_u[i]][in_n+1]*dvp[in_u[i]]+map[in_v[i]][in_n+1]*dvp[in_v[i]];
        sort(qwq+1,qwq+in_m+1,cmp);
        for(register int i=1;i<=in_m;++i)
            ans+=qwq[i]*(double)i;
        printf("%.3lf",ans);
    }

     

     

  • 相关阅读:
    URL域名获取
    SQL Server 索引结构及其使用(二)
    SQL Server 索引结构及其使用(一)[转]
    查询数据库中所有表的数据量、有效数据量以及其它定制数据量
    转:Servlet的url匹配以及url-pattern详解
    转:在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
    MyEclipse +Servlet 乱码
    MyEclipse +Tomcat 异常操作
    Android Include标签
    转ATL对象类型
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11008516.html
Copyright © 2011-2022 走看看