BZOJ5473: 仙人掌
传送门
首先,所有连通块的个数的期望再减去每个点孤立的概率就是答案。
设 \(d_i\) 表示 \(i\) 的度数,那么每个点孤立的概率为 \(\frac{1}{2^{d_i}}\)
考虑计算所有连通块的个数的期望
对于一棵树来说,每次删除一条边会使得连通块的个数 \(+1\),概率为 \(\frac{1}{2}\),那么 \(n-1\) 条边的期望就是 \(1+\frac{n-1}{2}\)
对于仙人掌来说,如果这次删的是环上第一个被删除的边,那么不会贡献答案,所以要减去在一个环上至少删除了一条边的概率,设长度为 \(len\),就要减去 \(1-\frac{1}{2^{len}}\)
所以只要求出每个环就好了。
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;namespace IO {const int maxn(1 << 21 | 1);char ibuf[maxn], *iS, *iT, c;int f;inline char Getc() {return (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, maxn, stdin), (iS == iT ? EOF : *iS++)) : *iS++);}template <class Int> inline void In(Int &x) {for (f = 1, c = Getc(); c < '0' || c > '9'; c = Getc()) f = c == '-' ? -1 : 1;for (x = 0; c <= '9' && c >= '0'; c = Getc()) x = (x << 3) + (x << 1) + (c ^ 48);x *= f;}
}using IO :: In;const int maxn(1e6 + 5);
const int mod(1e9 + 7);inline void Inc(int &x, const int y) {x = x + y >= mod ? x + y - mod : x + y;
}inline void Dec(int &x, const int y) {x = x - y < 0 ? x - y + mod : x - y;
}inline int Add(int x, const int y) {return x + y >= mod ? x + y - mod : x + y;
}inline int Sub(int x, const int y) {return x - y < 0 ? x - y + mod : x - y;
}inline int Pow(ll x, int y) {ll ret = 1;for (; y; y >>= 1, x = x * x % mod)if (y & 1) ret = ret * x % mod;return ret;
}struct Edge { int to, next; };int n, m, d[maxn], first[maxn], cnt, inv2[maxn << 1], fa[maxn], ans, vis[maxn], deep[maxn];
Edge edge[maxn << 2];inline void AddEdge(int u, int v) {edge[cnt] = (Edge){v, first[u]}, first[u] = cnt++, ++d[u];edge[cnt] = (Edge){u, first[v]}, first[v] = cnt++, ++d[v];
}void Dfs(int u, int ff) {int e, v, len, cur;vis[u] = 1;for (e = first[u]; ~e; e = edge[e].next)if ((v = edge[e].to) ^ ff) {if (!vis[v]) deep[v] = deep[u] + 1, fa[v] = u, Dfs(v, u);else if (deep[v] < deep[u]) {for (len = 1, cur = u; cur ^ v; cur = fa[cur]) ++len;Dec(ans, (ll)Sub(1, inv2[len]) % mod);}}
}int main() {int i, u, v;memset(first, -1, sizeof(first));In(n), In(m);inv2[0] = 1, inv2[1] = (mod + 1) >> 1;for (v = m + m, i = 2; i <= v; ++i) inv2[i] = (ll)inv2[i - 1] * inv2[1] % mod;for (i = 1; i <= m; ++i) In(u), In(v), AddEdge(u, v);ans = Add(1, (ll)m * inv2[1] % mod), Dfs(1, 0);for (i = 1; i <= n; ++i) Dec(ans, inv2[d[i]]);ans = (ll)ans * Pow(2, m) % mod, printf("%d\n", ans);return 0;
}
转载于:https://www.cnblogs.com/cjoieryl/p/10418269.html
BZOJ5473: 仙人掌相关推荐
- [bzoj5473] 仙人掌
Description 有一个n个点,m个边的仙人掌.所谓仙人掌,就是任何一个点至多属于一个环. 每个边有1/2的概率被删掉.问期望剩下多少个边联通块. 所谓边联通块,就是问剩下的边,构成多少个联通块 ...
- [bzoj5473]仙人掌
传送门 这个题首先可以考虑一个点也算作一个联通块 去掉所有的边那么答案即为\(2^m*n\) 然后发现每加上一条边就会使联通块的数量减1,这部分是\(-2^{m-1}*m\) 但是这是一个仙人掌图,在 ...
- Forest Program dfs+tanjar仙人掌
题目链接 CCPC2019 F题. 题意:给一颗仙人掌树,让你求每一个小环的边的个数,用快速幂即可求解. 思路:第一反应是tanjar乱搞,把每个环上的点取出来,类似于缩点的方法.但是忽然感觉dfs能 ...
- 基于卷积神经网络(CNN)的仙人掌图像分类
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天我们的目标是建立一个分类器,将图像分类为"仙人掌&q ...
- SHOI2008仙人掌图(tarjan+dp)
Solution 好题啊没的说. 本题需要求出仙人掌的直径,但仙人掌是一个带有简单环的一张图无法直接用树形dp求解,但它有一个好东西就是没有类似环套环的东西,所以我们在处理时就方便了一些. 思路:ta ...
- 电脑仙人掌机器人作文_神奇的仙人掌作文400字
1神奇的仙人掌作文400字 六年级作文 [神奇的仙人掌作文400字] 文 谭茜 地球上有许多神奇的事物,比如松树.芭蕉树.仙人掌--但我觉得最神奇的还是仙人掌. 仙人掌就是一个月不浇水也不会渴死,这与 ...
- COJ 0650 绝世难题(一) 可爱的仙人掌
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=620 绝世难题(一) 可爱的仙人掌 难度级别:E: 运行时间限制:1000m ...
- 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)
传送门 题意:给出一个仙人掌森林求其最大独立集. 思路:如果没有环可以用经典的树形dpdpdp解决. fi,0/1f_{i,0/1}fi,0/1表示第iii个点不选/选的最大独立集. 然后fi,0+ ...
- [zjoi2017]仙人掌
前言 谨以此题纪念我第一次参加省选时刚了5h这一题得到0分的经历 题目相关 链接 题目大意 给出仙人掌定义:如果一个无自环无重边无向连通图的任意一条边最多属于一个简单环,我们就称之为仙人掌 给出一个图 ...
最新文章
- 共享库报错问题及解决方案
- 计算机应用基础 实验指导,计算机应用基础实验指导EXCEL
- Windows 下安装Pytorch
- 3.爱跑步的蜗壳人动态(下同)
- pytorch指定用多张显卡训练_Pytorch多GPU训练
- Qt Linguist基于文本ID的翻译
- javascript 中文帮助文档_实战式方法学习JavaScript(1)
- 在 SAP Kyma 上部署一个 Go MSSQL API Endpoint
- cdr 表格自动填充文字_做平面广告设计,AI和CDR如何选择?
- 遗传算法中适值函数的标定与大变异算法
- 真正的帅哥没人说帅_“浩南哥”这话你敢信?郑伊健:在香港,没人夸我帅
- 大数据催生智慧园区_颠覆性的大数据时代催生革命发展
- 电子元器件选型——电阻
- 用JavaScript写的U校园自动答题浏览器分析
- 信息化为五万教学点带来“优质教师”
- 三菱FX1S PLC控制伺服电机小结
- Linux-常用命令
- Android Studio Logcat 左边的工具栏不显示了 Show Toolbar
- [软件安装] 动态图像录制工具LICEcap
- xyplorer设置备忘