Description

Solution

考虑每一条边的贡献

对于树边,如果两边各存在一个点,那么有贡献,总贡献就是 \((2^{size}-1)*(2^{n-size}-1)\) 分别对应两边的 \(size\)

对于环上的边,首先最优策略是断掉空隙最大一段, \(DP\) 算贡献

具体来说就是枚举最大空隙长度,每一次转移保证每一段之间的位置之差不超过最大空隙就好了

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. template<class T>void gi(T &x){
  4. int f;char c;
  5. for(f=1,c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
  6. for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);x*=f;
  7. }
  8. const int N=405,mod=1e9+7,M=1e5+10;
  9. inline int qm(int x,int k){
  10. int sum=1;
  11. while(k){
  12. if(k&1)sum=1ll*sum*x%mod;
  13. x=1ll*x*x%mod;k>>=1;
  14. }
  15. return sum;
  16. }
  17. int dep[N],fa[N],sz[N],a[N],cnt=0,b[N],f[N],ans=0;
  18. inline void solve(int n){
  19. for(int i=1;i<=n;i++)a[i+n]=a[i];
  20. for(int i=1;i<=n-2;i++){
  21. for(int s=1;s<=n;s++){
  22. f[s+i]=a[s+i];
  23. for(int j=s+i+1;j<s+n;j++){
  24. for(int k=1;k<=i;k++)f[j]=(f[j]+f[j-k])%mod;
  25. if(j-i<=n)f[j]=(f[j]+f[j-i-1])%mod;
  26. f[j]=1ll*f[j]*a[j]%mod;
  27. }
  28. ans=(ans+1ll*f[s+n-1]*(n-i-1))%mod;
  29. for(int j=s+i;j<s+n;j++)f[j]=0;
  30. }
  31. }
  32. int t=1;
  33. for(int i=1;i<=n;i++)t=1ll*t*a[i]%mod;
  34. ans=(ans+1ll*t*(n-1))%mod;
  35. cnt=0;
  36. }
  37. int n,m,head[N],nxt[M],to[M],num=1;bool vis[M];
  38. inline void link(int x,int y){nxt[++num]=head[x];to[num]=y;head[x]=num;}
  39. inline void dfs(int x){
  40. sz[x]=1;
  41. for(int i=head[x],u;i;i=nxt[i]){
  42. if(sz[u=to[i]]){
  43. if(dep[u]>dep[x]){
  44. int v=u,la=0;
  45. while(v!=x){
  46. a[++cnt]=b[sz[v]-sz[la]]-1;
  47. vis[fa[v]]=vis[fa[v]^1]=1;v=to[fa[la=v]^1];
  48. }
  49. a[++cnt]=b[n-sz[la]]-1;vis[i]=vis[i^1]=1;
  50. solve(cnt);
  51. }
  52. continue;
  53. }
  54. fa[u]=i;dep[u]=dep[x]+1;
  55. dfs(u);sz[x]+=sz[u];
  56. }
  57. }
  58. int main(){
  59. freopen("pp.in","r",stdin);
  60. freopen("pp.out","w",stdout);
  61. int x,y;
  62. cin>>n>>m;b[0]=1;
  63. for(int i=1;i<=n;i++)b[i]=b[i-1]*2%mod;
  64. for(int i=1;i<=m;i++){
  65. gi(x);gi(y);
  66. link(x,y);link(y,x);
  67. }
  68. dfs(1);
  69. for(int i=2;i<=num;i+=2)
  70. if(!vis[i]){
  71. x=to[i];y=to[i^1];
  72. if(dep[x]<dep[y])swap(x,y);
  73. ans=(ans+1ll*(b[sz[x]]-1)*(b[n-sz[x]]-1))%mod;
  74. }
  75. ans=1ll*ans*qm(b[n],mod-2)%mod;
  76. printf("%d\n",ans);
  77. return 0;
  78. }

bzoj 5315: [Jsoi2018]防御网络的更多相关文章

  1. 【BZOJ5315】[JSOI2018]防御网络(动态规划,仙人掌)

    [BZOJ5315][JSOI2018]防御网络(动态规划,仙人掌) 题面 BZOJ 洛谷 题解 显然图是仙人掌. 题目给了斯坦纳树就肯定不是斯坦纳树了,,,, 总不可能真让你\(2^n\)枚举点集再 ...

  2. bzoj5315/luoguP4517 [JSOI2018]防御网络(仙人掌,dp)

    bzoj5315/luoguP4517 防御网络(仙人掌,dp) bzoj Luogu 题目描述略(太长了) 题解时间 本题和斯坦纳树无关. 题面保证了是一个仙人掌...? 但这个环之间甚至交点都没有 ...

  3. BZOJ5315 [JSOI2018]防御网络 【仙人掌 + dp】

    题目链接 BZOJ5315 题解 题目好吓人= =点仙人掌 + 斯坦纳树 我们只需求出对于所有选点的方案的斯坦纳树边长总和 \(n\)那么大当然不能状压,但是考虑一下如果这是一棵树,一个方案的贡献就是 ...

  4. 洛谷P4517 [JSOI2018]防御网络(dp)

    题面 传送门 题解 翻译一下题意就是每次选出一些点,要用最少的边把这些点连起来,求期望边数 我也不知道为什么反正总之就是暴力枚举太麻烦了所以我们考虑贡献 如果一条边是割边,那么它会在图里当且仅当两边的 ...

  5. LOJ 2547 「JSOI2018」防御网络——思路+环DP

    题目:https://loj.ac/problem/2547 一条树边 cr->v 会被计算 ( n-siz[v] ) * siz[v] 次.一条环边会被计算几次呢?于是去写了斯坦纳树. #in ...

  6. LOJ #2547 Luogu P4517「JSOI2018」防御网络

    好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...

  7. 【LOJ】 #2547. 「JSOI2018」防御网络

    题解 如果只是一棵树的话,那么就枚举每条边,分成两部分大小为\(a\)和\(b\) 那么这条边被统计的方案数是\((2^a - 1)(2^b - 1)\) 如果是一个环的话,我们枚举环上至少有\(N ...

  8. bzoj 1834: [ZJOI2010]network 网络扩容

    #include<cstdio> #include<iostream> #include<cstring> #define M 100000 #define inf ...

  9. bzoj 1834 [ZJOI2010]network 网络扩容(MCMF)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1834 [题意] 给定一个有向图,每条边有容量C,扩容费用W,问最大流和使容量增加K的最 ...

随机推荐

  1. [SDOI2009] HH的项链 | 莫队模板

    题目链接:戳我 题意:求区间中不同颜色的种类数 因为是要过知识点,所以又把这题拿出来做了一遍......这里就写两种方法吧 主席树做法 设pre[i]为第i个点上的颜色在前面序列中出现的最晚的一次的位 ...

  2. lua 5.3 英文手册 自己收集整理版

    /* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);//创建lua虚拟机 LUA ...

  3. ocp最新考试题库:052新考题及答案整理-36

    36.Which two are true about roles? A) A role can be granted a combination of system and object privi ...

  4. kali linux之msf信息收集

    nmap扫描 Auxiliary 扫描模块 目前有557个扫描方式

  5. form在模版中的渲 染方式

    链接:https://www.jianshu.com/p/46b2aa2d5a23 form.as_p 渲染表单为一系列的p标签,每个p标签包含一个字段: <p> <label fo ...

  6. php-fpm 操作命令

    以下内容转自 https://www.cnblogs.com/alibai/p/4070076.html 和 https://blog.csdn.net/wzx19840423/article/det ...

  7. P2319 [HNOI2006]超级英雄 题解

    [HNOI2006]超级英雄 题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目, ...

  8. ListView-电影列表

    import React, { Component } from 'react';import { Platform, StyleSheet, Text, View, ListView } from ...

  9. CGLIB动态代理模式

    概念: 第三方技术CGLIB动态代理和JDK代理不同的是,JDK代理需要提供接口,而CGLIB代理不需要: 它只需要一个非抽象类就能实现动态代理 例子: /** * 非抽象类 * @author Ad ...

  10. tomcat正常启动后http://localhost:8080/报错404

    病症: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问.关闭eclipse里面的tomca ...