码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5036 Explosion 传递闭包

时间:2017-05-09 12:48:35      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:ret   logs   传递   case   amp   而且   double   exp   blog   

大哲哥的讲课内容

根据期望的线性性,得到总期望为各个点被轰的概率(不会证,好像是这样吧)

传递闭包解决出每个点的祖先(能到达它的点)就能算概率了

bitset能贡献1/w的复杂度,而且导致Floyd只剩下两个for了(一点都不像经典Floyd)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int T,n,m,t;
 4 bitset<1001> a[1001];
 5 int main()
 6 {
 7     scanf("%d",&T);
 8     for(int cas=1;cas<=T;cas++)
 9     {
10         scanf("%d",&n);
11         for(int i=1;i<=n;i++)
12             a[i].reset(),a[i][i]=1;
13         for(int i=1;i<=n;i++)
14         {
15             scanf("%d",&m);
16             for(int j=1;j<=m;j++)
17                 scanf("%d",&t),a[t][i]=1;
18         }
19         for(int i=1;i<=n;i++)
20             for(int j=1;j<=n;j++)
21                 if(a[j][i])
22                     a[j]|=a[i];
23         double ans=0;
24         for(int i=1;i<=n;i++)
25             ans+=1.0/a[i].count();
26         printf("Case #%d: %.5f\n",cas,ans);
27     }
28     return 0;
29 }

 

hdu5036 Explosion 传递闭包

标签:ret   logs   传递   case   amp   而且   double   exp   blog   

原文地址:http://www.cnblogs.com/wanglichao/p/6829833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!