• 绿豆蛙的归宿


      1 #include<cstdio>
      2 #include<iostream>
      3 #include<cstring>
      4 #include<queue>
      5 #define mem(a,b) memset(a,b,sizeof(a))
      6 #define dd double
      7 using namespace std;
      8 int read()
      9 {
     10     int ans=0;char q=getchar();
     11     while(q<'0'||q>'9')q=getchar();
     12     while(q>='0'&&q<='9'){ans=ans*10+q-'0';q=getchar();}
     13     return ans;
     14 }
     15 const int N=100010;
     16 struct son
     17 {
     18     int v,next,w;
     19 };
     20 son a1[N<<1];
     21 int first[N<<1],e;
     22 
     23 void addbian(int u,int v,int w)
     24 {
     25     a1[e].w=w;
     26     a1[e].v=v;
     27     a1[e].next=first[u];
     28     first[u]=e++;
     29 }
     30 
     31 int n,m;
     32 int u,o,p;
     33 double indegree[N],outdegree[N];
     34 int tuo[N],now;
     35 double f[N];
     36 double ans;
     37 double gai[N];
     38 queue<int> q;
     39 
     40 void qiutuo()
     41 {
     42     tuo[++now]=1;
     43     q.push(1);
     44     while(!q.empty())
     45     {
     46         int k=q.front();
     47         q.pop();
     48         for(int i=first[k];i!=-1;i=a1[i].next)
     49         {
     50             int temp=a1[i].v;
     51             --indegree[temp];
     52             if(!indegree[temp])
     53             {
     54                 tuo[++now]=temp;
     55                 q.push(temp);
     56             }
     57         }
     58     }
     59 }
     60 
     61 void out11()
     62 {
     63     printf("
    ");
     64     for(int i=1;i<=n;++i)
     65       printf("%d ",tuo[i]);
     66     printf("
    ");
     67     for(int i=1;i<=n;++i)
     68       printf("%.0lf ",indegree[i]);
     69     printf("
    ");
     70     for(int i=1;i<=n;++i)
     71       printf("%.0lf ",outdegree[i]);
     72     printf("
    ");
     73     for(int i=1;i<=n;++i)
     74       printf("%.2lf ",f[i]);
     75     printf("
    ");
     76 }
     77 
     78 int main(){
     79     //freopen("1.txt","r",stdin);
     80     freopen("ldfrog.in","r",stdin);
     81     freopen("ldfrog.out","w",stdout);
     82     mem(first,-1);
     83     n=read();m=read();
     84     for(int i=1;i<=m;++i)
     85     {
     86         u=read();o=read();p=read();
     87         ++indegree[o];
     88         ++outdegree[u];
     89         addbian(u,o,p);
     90     }
     91     
     92     for(int i=1;i<n;++i)
     93         gai[i]=(dd)1/outdegree[i];
     94     
     95     qiutuo();
     96     f[1]=1;
     97     for(int i=1;i<=n;++i)
     98         for(int j=first[tuo[i]];j!=-1;j=a1[j].next)
     99         {
    100             int temp=a1[j].v;
    101             f[temp]+=f[tuo[i]]*gai[tuo[i]];
    102         }
    103     
    104     for(int i=1;i<=n;++i)
    105         for(int j=first[i];j!=-1;j=a1[j].next)
    106             ans+=(f[i]*gai[i]*(dd)a1[j].w);
    107             
    108     printf("%.2lf",ans);
    109     
    110     //out11();
    111     
    112 //    while(1);
    113     return 0;
    114 }
    115     
    116     
    117     
    118     
    119     
    120     
    121     
    122     
    123     
    124     
    125     
    126     
    127     
    128     
    129     
    130     
    131     
    132     
    133     
    134     
    135     
    136     
    137     
    View Code
  • 相关阅读:
    基础知识梳理
    计算机基础
    IAR平台下使用STM32的DSP配置方法
    第五节:STM32输入捕获(用CubeMX学习STM32)
    第四节:定时器中断及定时器产生PWM(用CubeMX学习STM32)
    第三节: 串口通信(用CubeMX学习STM32)
    第二节: 外部中断学习(用CubeMX学习STM32)
    第一节补充: 按键操作(CubeMX加HAL库学STM32系列)
    第一节:用Cube学32之简单IO口操作(点灯及按键)
    STM32程序中使用printf打印中文字符乱码
  • 原文地址:https://www.cnblogs.com/A-LEAF/p/7247487.html
Copyright © 2020-2023  润新知