【传递闭包】 HDOJ 5036 Explosion
2014-09-23 18:36
239 查看
只要求每个门被开掉的数学期望和就行了。。。用floyd传递闭包。。。用bitset优化一下。。。
#include <iostream> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cmath> #include <time.h> #define maxn 1005 #define maxm 300005 #define eps 1e-10 #define mod 10000007 #define INF 1e17 #define lowbit(x) (x&(-x)) #define mp make_pair #define ls o<<1 #define rs o<<1 | 1 #define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R typedef long long LL; //typedef int LL; using namespace std; LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;} LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;} void scanf(int &__x){__x=0;char __ch=getchar();while(__ch==' '||__ch=='\n')__ch=getchar();while(__ch>='0'&&__ch<='9')__x=__x*10+__ch-'0',__ch = getchar();} LL gcd(LL _a, LL _b){if(!_b) return _a;else return gcd(_b, _a%_b);} //head bitset<maxn> p[maxn]; int n, m; void read(void) { scanf("%d", &n); for(int i = 1; i <= n; i++) { p[i].reset(); p[i][i] = true; } for(int i = 1; i <= n; i++) { scanf("%d", &m); while(m--) { int j; scanf("%d", &j); p[i][j] = true; } } } void work(int _) { for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) if(p[j][i]) p[j] |= p[i]; double ans = 0; for(int i = 1; i <= n; i++) { int cnt = 0; for(int j = 1; j <= n; j++) if(p[j][i]) cnt++; ans += 1.0 / cnt; } printf("Case #%d: %.5f\n", _, ans); } int main(void) { int _, __; while(scanf("%d", &_)!=EOF) { __ = 0; while(_--) { read(); work(++__); } } return 0; }
相关文章推荐
- Hdu 5036-Explosion 传递闭包,bitset,期望/概率
- hdu5036 Explosion 传递闭包
- 算法结点图的多源点最短路问题和传递闭包之Floyd-Warshall算法 By ACReaper
- javascript技巧:用闭包传递参数
- poj 3660 floyd 传递闭包
- floyd求传递闭包
- Poj3660 Cow Contest 【传递闭包】
- 闭包执行的时候值的传递方式
- poj 3660 传递闭包
- 【LightOJ】Assassin`s Creed (II) (缩点,传递闭包,二分图匹配,最小路径覆盖)
- hoj 2741 The Busiest Man // 强连通分支+缩点+传递闭包
- 电话圈(Calling Circles,ACM/ICPC World Finals 1996,UVA247) ——Floyd图的传递闭包
- hdu 1704 传递闭包
- BZOJ 2718: [Violet 4]毕业旅行 二分图最大点独立集 传递闭包
- 【BZOJ2718】[Violet 4]毕业旅行【最长反链】【传递闭包】
- http://acm.nyist.net/JudgeOnline/problem.php?pid=211&&有向图传递闭包问题
- floyd 闭包传递 判断两个点是否属于同一个 强连通分量
- Floyd算法求图的传递闭包
- poj1975 Median Weight Bead ----floyd 传递闭包
- HDU 5036 Explosion