希望

题意:

有A,B两棵树,对于一个1到n的全排列a[i],让树A中的点i和树B的节点a[i]连一条边,希望指数:两棵树和新加入的边构成的图中,环长为m的环的个数。数组a[]可以任意交换位置,且任意,随机,不限次数的交换。计算出期望情况下,两棵树的希望指数
n≤300,3≤m≤7

题解:

期望=概率 * 对应的权值
在本题中概率肯定是1n!\frac{1}{n!}n!1​,因此需要求所有情况下环长为m的环的个数
我们开始找环的分布情况,一定是左侧的点和右侧的点通过之间加的点形成环,如图,图中环长为6

且所有环用到中间新建边只能为两条边,可能会疑惑,为什么?像图中情况,用到的新建边的数量为4,不是2,但是图中环的长度为8(这已经是新建边4所对应的环最小长度),而题目保证所求环长<=7,刚好不行。也就是其实题目是隐含着新建边最多用两条,不可能更多

我们确定了中间边只能用2,那就好说了,比如让你求环为x的数量,x先减2,y=x-2,然后就是两个树一共构成长度为y,因此我们预先处理出两个子树分别能组成长度为len的边的数量,用桶来存。比如:tong1[i]:表示在树A中长度为i的边的数量。那么答案就:tong1[i]∗tong2[m−i−2]∗2.0∗((n−2))tong1[i]*tong2[m-i-2]*2.0*((n-2))tong1[i]∗tong2[m−i−2]∗2.0∗((n−2))
i是树A需要提供的边,m-i-2是树B需要提供的边,乘2.0是因为边可以交叉和不交叉来,正好两种,而最后(n-2)!是什么?我们之前说过最多用新增边为2,那么说明左右各有两个点要被占用(因为一个边有两个点),而其他的点可以任意排列,剩下的点就是(n-2)个,任意排列就是阶乘
再讲一些细节:
比如树上所有路径长度,可以用floyd来求,因为答案要乘(n-2)!,而最终答案还要除以n!,所以直接除以n*(n-1)即可

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=400;
vector<int>a[maxn],b[maxn],g[maxn];
int L[maxn];
int x[maxn][maxn];
int y[maxn][maxn];
int tong1[maxn],tong2[maxn];
int main()
{//rd_test();int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){x[i][j]=1e9;y[i][j]=1e9;}}for(int i=1;i<n;i++){int u,v;read(u,v);x[u][v]=x[v][u]=1;}for(int i=1;i<n;i++){int u,v;read(u,v);y[u][v]=y[v][u]=1;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){x[i][j]=min(x[i][j],x[i][k]+x[k][j]);y[i][j]=min(y[i][j],y[i][k]+y[k][j]);}}}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(i==j)continue;if(x[i][j]==1e9)continue;if(y[i][j]==1e9)continue;tong1[x[i][j]]++;tong2[y[i][j]]++;}}double ans=0;for(int i=1;i<=m-3;i++){ans=ans+1.0*tong1[i]*tong2[m-i-2]*2.0/(1.0*n*(n-1));}printf("%.4lf\n",ans);//Time_test();
}

ADPC2-G 希望相关推荐

  1. 小G的项链(Manacher)

    我看网上也没有写这个题的,顺便写一下(可能是大佬都觉得太简单了 ) 链接:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO ...

  2. 使用Jittor实现Conditional GAN

    Jittor实现Conditional GAN Generative Adversarial Nets(GAN)提出了一种新的方法来训练生成模型.然而,GAN对于要生成的图片缺少控制.Conditio ...

  3. tensorflow生成对抗网络

    import tensorflow as tf import numpy as np import os from tensorflow.examples.tutorials.mnist import ...

  4. 深入理解风格迁移三部曲(三)--FUNIT

    FUNIT: Few-Shot Unsupervised Image-to-Image Translation project:https://nvlabs.github.io/FUNIT/ 作者:陈 ...

  5. 第四范式程晓澄:机器学习如何优化推荐系统

    本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文长度为9532字,建议阅读10分钟 本文为你介绍推荐系统的诞生土壤和早起演进.推荐系统当下的基本架构以及如何搭建一个推 ...

  6. slice_input_producer在2.0版本里怎么用_用Gan生成一维数据(附代码)

    引言 之前在知乎上问过一个关于使用对抗生成网络(Generative Adversarial Network)生成一维数据的问题.最近老是有人问代码的问题,网上关于图片的很多,一维数据的也有,但是比较 ...

  7. ICCV2019最佳论文SinGAN全面解读,看这一篇就懂了

    轻沉 发自 浅度寺  量子位 出品 | 公众号 QbitAI 在韩国首尔举办的ICCV 2019会议上,SinGAN: Learning a Generative Model from a Singl ...

  8. HBase在淘宝的应用和优化小结

    本文来自于NoSQLFan联合作者@koven2049,他在淘宝从事Hadoop及HBase相关的应用和优化.对Hadoop.HBase都有深入的了解,本文就是其在工作中对HBase的应用优化小结,分 ...

  9. DCGAN in Tensorflow生成动漫人物

    引自:GAN学习指南:从原理入门到制作生成Demo 生成式对抗网络(GAN)是近年来大热的深度学习模型.最近正好有空看了这方面的一些论文,跑了一个GAN的代码,于是写了这篇文章来介绍一下GAN. 本文 ...

  10. 综述 | 生成对抗网络(GAN)在图网络中的应用

    导语: 生成对抗网络(Generative Adversarial Network,简称GAN)是非监督式学习的一种方法,通过让两个神经网络相互博弈的方式进行学习.自2014年GAN网络提出以来,其在 ...

最新文章

  1. Discuz!NT论坛代码小分析
  2. 【转载】C++创建对象的两种方法
  3. 网友写的ELK安装步骤
  4. Linux版本Membase无法写入default bucket的问题分析
  5. 修改 this 指向
  6. WCF RIA优缺点
  7. Modbus协议栈开发笔记之五:Modbus RTU Slave开发
  8. Android开发:1-2、UI编程----TextView、EditView、Button、ImageView、ImageButton、CheckBox
  9. 苹果CMSv10黑金色自适应网站模板
  10. JavaScript(二)数据类型(二)
  11. java基于JSP+Servlet的员工绩效考核系统
  12. vue项目通讯录_vue组件--通讯录
  13. linux中安装程序的命令是,Linux安装软件命令是什么
  14. 论文中设置章节自动编号
  15. 全面设防 让广播风暴远离局域网
  16. gb28181协议流媒体实现为rtp荷载ps流,将h264流打包成ps流。
  17. 51GIF GIF动图中文搜索平台,表情包发源地,GIF动图素材库
  18. 一键检测Linux VPS/服务器配置、IO、国内节点下载测速
  19. pro缺点和不足 一加7t_一加7T与OPPO Reno Ace 各有优势与缺点
  20. ELK在安全运营中的应用实践

热门文章

  1. 什么就像谈恋爱一样?
  2. 你爱我吗? | 今日最佳
  3. 周杰伦新歌《说好不哭》彩蛋大汇总! | 今日最佳
  4. 怎样快速掌握深度学习TensorFlow框架?
  5. 什么样的程序员会让人讨厌
  6. java笔试题递归,递归(网上搜的一些笔试题)
  7. 启动zookeeper_Giraph源码分析(一)—启动ZooKeeper服务
  8. 名片管理系统python详解_名的解释|名的意思|汉典“名”字的基本解释
  9. php 获取对象所有成员变量,PHP成员变量获取对比
  10. 用python画树_Python+Turtle动态绘制一棵树实例分享