THUWC2017 bipartite

【问题描述】

某人在玩一个非常神奇的游戏。这个游戏中有一个左右各 n 个点的二分图,图中的边会按照一定的规律随机出现。

为了描述这些规律,某人将这些边分到若干个组中。每条边或者不属于任何组 (这样的边一定不会出现),或者只属于一个组。

有且仅有以下三类边的分组:

  1. 这类组每组只有一条边,该条边恰好有 50% 的概率出现。

    • 这类组每组恰好有两条边,这两条边有 50% 的概率同时出现,有 50% 的概率同时不出现。

    • 这类组每组恰好有两条边,这两条边恰好出现一条,各有 50% 的概率出现。
    • 组和组之间边的出现都是完全独立的。

      某人现在知道了边的分组和组的种类,想要知道完美匹配数量的期望是多少。你能帮助她解决这个问题吗?

      【定义解释】

      如果你对完美匹配和期望的定义很熟悉,那么你可以跳过本段。

      对于一个左右各 n 个点的二分图,它的一个完美匹配是指 n 条没有公共点的边构成的匹配。

      两个完美匹配不同,当且仅当它们至少含有一条不同的边。一个二分图完美匹配的数量定义为这张图能找到的两两不同的完美匹配的数量。

      在题目的图中,边都是随机出现的,因此这个图中完美匹配的数量是一个随机变量。一个(离散型)随机变量 X 的期望定义为以概率为权,X 所有可能取值的加权平均数,即

      xV(X)P[X=x]x

      其中 V(X) 表示 X 所有可能的取值集合,P[X=x] 表示 X 取值为 x 的概率。

      【输入格式】

      从标准输入读入数据。

      第一行两个数 nm,表示图左右点数的数量和边的组的个数。我们用 (a,b) (其中 1a,bn)表示一条左端点为二分图左侧第 a 个点,右端点为二分图右侧第 b 个点的边。

      接下来 m 行,每行描述一个组。开头第一个数 t 表示组的种类,t=0 表示是一条边的组,t=1 表示是两条边的组中的第一种,t=2 表示是两条边的组中的第二种。如果 t=0, 接下来两个数 a1,b1 表示组内的第一条边;否则,接下来四个数 a1,b1,a2,b2, 表示该组内的两条边分别为 (a1,b1)(a2,b2)。保证每条边至多出现一次。

      【输出格式】

      输出到标准输出。

      假设期望的完美匹配数量是E。输出一行表示

      (2nE)mod(109+7)

      可以看出上式一定是一个整数。

      【样例数据】

      bipartite1.in

      2 2
      1 2 1 2 2
      2 1 2 1 1

      bipartite1.ans

      2

      bipartite2.in

      3 5
      1 1 2 3 3
      1 3 2 2 2
      1 1 1 1 3
      1 2 1 3 1
      0 2 3

      bipartite2.ans

      7

      bipartite3.in

      4 9
      2 4 1 4 2
      1 3 2 1 4
      2 2 1 4 4
      2 3 4 1 1
      2 4 3 2 4
      2 2 2 3 1
      0 1 3
      0 3 3
      1 2 3 1 2

      bipartite3.ans

      20

      【数据规模和约定】

      对于 5% 的数据 n5

      对于另 5% 的数据 n8

      对于另 10% 的数据 n10

      对于另 15% 的数据,只有t=0 的情况。

      对于另 5% 的数据,只有t=0 的情况,且m=n2,也就是该图为一个完全图。

      对于另 20% 的数据,只有 t=0 或者 t=1 的情况。

      对于另 20% 的数据,只有 t=0 或者 t=2 的情况。

      对于 100% 的数据,n15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值