loj2027 「SHOI2016」黑暗前的幻想乡】的更多相关文章

矩阵树定理+模意义下整数高斯消元 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> using namespace std; typedef long long ll; typedef pair<int,int> pii; int n, uu, vv, ww, w[21][21]; const…
「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱. 期间想过矩阵树定理,但没想清楚又被我忽略了. 其实非常简单 你对着所有的东西跑一遍生成树计数,然后你发现统计了同一个施工队的方案,然后发现可以枚举子集,就是个sb容斥了 Code: #include <cstdio> #include <cctype> #include <algorithm>…
题解 我一开始写的最小表示法写的插头dp,愉快地TLE成60分 然后我觉得我就去看正解了! 发现是容斥 + 矩阵树定理 矩阵树定理对于有重边的图只要邻接矩阵的边数设置a[u][v]表示u,v之间有几条边就好 我们枚举哪些公司不用,然后用矩阵树求一下生成几棵树,复杂度\(2^{n - 1}(n - 1)^3\) 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstrin…
题目链接 戳我 \(Describe\) \(n−1\)个公司,每个公司能修一些边,求每条边都让不同的公司来修的生成树的方案数 \(Solution\) 这道题很明显容斥.答案就是:所有都选的生成树个数\(-\)一个没选的生成树个数\(+\)两个没选的生成树个数\(-...\) 至于生成树个数怎么算,用\(Matrix - Tree\)矩阵树定理做就好了 如果不会:传送门 \(Code\) #include<bits/stdc++.h> #define int long long #defin…
\(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+7\) 取模.   \(2\le n\le17\),边集大小 \(0\le m_i\le\frac{n(n-1)}2\). \(\mathcal{Solution}\)   \(n\) 很小,考虑容斥.枚举这 \(n-1\) 个边集的子集,将子集内的边集的边加入图,用矩阵树定理求出生成树个数,容斥一…
题面 题解 如果没有建筑公司的限制,那么就是个\(\mathrm{Matrix\;tree}\)板子 其实有了也一样 发现\(n\leq 17\),考虑容斥 每次钦定一些建筑公司,计算它们包含的边的生成树的方案数 复杂度\(\mathrm{O}(2^nn^3)\) 代码 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #define RG register #de…
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 559  Solved: 325[Submit][Status][Discuss] Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解…
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 464  Solved: 264[Submit][Status][Discuss] Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解…
这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. 有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了n-1条细线,但通过这些细线,这颗小星星还是被串在一起,也就是这些小星星通过这些细线形成了树.小Y找到了这个饰品的设计图纸,她想知道现在饰品中的小星星对应着原来图纸上的哪些小星星.如果现在饰品中两颗小星星有细线相连,那么要求对应的…
P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ 公司n未参加方案数) 方案数=生成树方案数 所以用矩阵树定理瞎搞 显然后面的部分可以用容斥原理求解 枚举的时候用一个数转成二进制来表示哪些公司参加/不参加 mod=1e9+7是质数所以可以在高斯消元的时候用逆元搞 #include<iostream> #include<cstdio>…
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 324  Solved: 187 Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解决方案. 风间幽香是幻想乡里少有的意识到了问题的严…
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打算只修 N- 1 条路将这些城市连接起来.但是幻想乡有正好 N- 1 个建筑公司,每个建筑公司都想在修路的过程中获得一些好处. 虽然这些建筑公司在选举前没有给幽香钱,幽香还是打算和他们搞好关系,因为她还指望他们帮她建墙.所以她打算让每个建筑公司都负责一条路来修.每个建筑公司都告诉了幽香自己有能力负责…
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都属于不同公司就很难直接实现. 按套路上容斥: 如果直接将几个公司的修路列表加进矩阵里的话,求出来的是"只使用"这些边的生成树个数. 很明显上容斥之后就会直接变成"只使用"且"每个都被使用"的个数. 正好符合题目要求的生成树的n-1条边分属于n-1个公…
「ZJOI2015」地震后的幻想乡 想了半天,打开洛谷题解一看,最高票是_rqy的,一堆密密麻麻的积分差点把我吓跑. 据说有三种解法,然而我只学会了一种最辣鸡的凡人解法. 题意:给一个无向图\(G\),边权为\([0,1]\)间的实数,求这个图的最小生成树的最大边权期望. 提示:对于 \(n\) 个 \([0,1]\) 之间的随机变量 \(x_1,x_2,\dots,x_n\),第 \(k\) 小的那个的期望值是 \(\frac{k}{n+1}\). 考虑使用这个提示来帮助解题. 首先有一个暴力…
[BZOJ4596]黑暗前的幻想乡(矩阵树定理,容斥) 题面 BZOJ 有\(n\)个点,要求连出一棵生成树, 指定了一些边可以染成某种颜色,一共\(n-1\)种颜色, 求所有颜色都出现过的生成树方案数. 题解 一脸的容斥啊. 先矩阵树定理暴力算出所有符合条件的生成树,然后减去\(n-2\)中颜色的方案数, 再加上\(n-3\)种颜色的方案数...... 所以直接暴力枚举颜色的子集,每次矩阵树就好了. 时间复杂度大概是\(O(2^{n-1}n^3log)\)??? 虽然\(log\)小的不行,甚…
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解决方案. 风间幽香是幻想乡里少有的意识到了问题的严重性的大妖怪.她这次勇敢的 站了出来参加幻想乡大选.提出包括在幻想乡边境建墙(并让人类出钱),大力 开展基础设施建设挽回失业率等一系列方案,成为了大选年出人意料的黑马并顺 利的当…
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解决方案. 风间幽香是幻想乡里少有的意识到了问题的严重性的大妖怪.她这次勇敢的 站了出来参加幻想乡大选.提出包括在幻想乡边境建墙(并让人类出钱),大力 开展基础设施建设挽回失业率等一系列方案,成为了大选年出人意料的黑马并顺 利的当…
https://www.lydsy.com/JudgeOnline/problem.php?id=4596 https://www.luogu.org/problemnew/show/P4336#sub 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类)博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡目前面临的种种大问题却给不出合适的解决方案. 风间幽香是幻想乡里少有的意识到了问题的严重性…
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类)博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡目前面临的种种大问题却给不出合适的解决方案. 风间幽香是幻想乡里少有的意识到了问题的严重性的大妖怪.她这次勇敢的站了出来参加幻想乡大选.提出包括在幻想乡边境建墙(并让人类出钱),大力开展基础设施建设挽回失业率等一系列方案,成为了大选年出人意料的黑马并顺利的当上了幻想乡的…
题目链接 LOJ:https://loj.ac/problem/2027 洛谷:https://www.luogu.org/problemnew/show/P4336 Solution 这题很像[ZJOI2016]小星星,注意到如果没有每个边集选一条边的限制的话,直接就是一个果的\(\rm matrix \ tree\)定理. 那么有这个限制我们算出来的生成树个数就会有不合法的情况,即一个边集里选多条边,或者说没有用到\(n-1\)个边集. 那么我们可以算出\(f[s]\)表示至考虑\(s\)状…
题解 前置芝士 :矩阵树定理 本题是一道计数题,有两个要求: 建造的公路构成一颗生成树 每条公路由不同的公司建造,每条公路与一个公司一一映射 那么看到这两个要求后,我们很容易想到第一个条件用矩阵树定理,那么对于第二个条件,我们就很容易想到容斥原理. 先不考虑第二个条件,把所有边都加进去(没有自环),这是我们用矩阵树原理算出来的结果不仅有 \(n-1\) 个公司建造的方案,也包括了 \((n-2)...1\) 个公司建造的方案. 此时,我们需要减去 \(n-2\) 个公司建造的方案,那么这里我们就…
Sol 容斥原理+Matrix-Tree定理.容斥跟小星星那道题是一样的,然后...直接Matrix-Tree定理就可以了... 复杂度\(O(2^{n-1}n^3)\) PS:调了好久啊QAQ 明明知道了Matrix-Tree定理了以后非常简单QAQ n-1写成n 直接真·爆0. Code /************************************************************** Problem: 4596 User: BeiYu Language: C++…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4596 题解: 容斥,矩阵树定理,矩阵行列式 先说说容斥:(一共有 N-1个公司) 令 f[i] 表示选出 (N-1)-i 个公司来修路(即有i个公司一定不修),且不管每个公司只能修一条路这一限制的方案数.那么 答案 ANS=0个公司不修的方案数 - 1个公司不修的方案数 +2个公司不修的翻案数 ...即 ANS= f[0] - f[1] +f[2] - ... + (-1)i*f[i]f[…
传送门 思路 首先看到生成树计数,想到Matrix-Tree定理. 然而,这题显然是不能Matrix-Tree定理硬上的,因为还有每个公司只能建一条路的限制.这个限制比较恶心,尝试去除它. 怎么除掉它呢? 容斥! 每当有恶心的限制时,用容斥去除它,也许这是套路? 枚举有哪几所公司承保了所有道路的修建,然后大力Matrix-Tree定理即可. 复杂度\(O(n^32^n)\)有点大,但还是可以过的. 代码 #include<bits/stdc++.h> clock_t t=clock(); na…
题目描述 给出 $n$ 个点和 $n-1$ 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 $10^9+7$ 取模. 输入 第一行包含一个正整数 N(N<=17), 表示城市个数. 接下来 N-1 行,其中第 i行表示第 i个建筑公司可以修建的路的列表: 以一个非负数mi 开头,表示其可以修建 mi 条路,接下来有mi 对数, 每对数表示一条边的两个端点.其中不会出现重复的边,也不会出现自环. 输出 仅一行一个整数,表示所有可能的方案数对 10^9 + 7 取模的…
自然地想到容斥原理 然后套个矩阵树就行了 求行列式的时候只有换行要改变符号啊QAQ 复杂度为\(O(2^n * n^3)\) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define ri register int #define rep(io, st, ed) for(ri io = st; io &l…
[题意]给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数.n<=17. [算法]容斥原理+生成树计数(矩阵树定理) [题解]每个生成树方案是一个公司有无修路的01排列,定义集合x为公司x有修路的方案集合,则题目要求集合交. 对于若干集合的集合并补集,即x个公司不修路的方案数,就是除去这x个公司的边的生成树数. ans=Σ(-1)^k g(k),0<=k<=n-1.g(k)表示枚举k个公司不修的生成树数. 复杂度O(2^(n-1)*n^3). 注意:…
真是简单粗暴 把矩阵树定理的运算当成黑箱好了反正我不会 这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了 然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队1能修的路的方案数-不选工程队2能修的路的方案数--+不选工程队12能修的路的方案数+不选工程队13能修的路的方案数---不选工程队123能修的路的方案数-- 这里直接O(2^(n-1))枚举选择状态即可,然后根据不选的个数奇偶来决定在ans上减或加即可 #include<iostream> #i…
传送门 Description 给出 n 个点和 n−1 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 109+7 取模. Input 第一行包含一个正整数 N(N<=17), 表示城市个数. 接下来 N-1 行,其中第 i行表示第 i个建筑公司可以修建的路的列表: 以一个非负数mi 开头,表示其可以修建 mi 条路,接下来有mi 对数, 每对数表示一条边的两个端点.其中不会出现重复的边,也不会出现自环. Output 输出一行一个整数,表示所有可能的方案数对…
真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的状态,每次重构矩阵,把参与连边的公司可以连的边写在矩阵中,然后求出方案. 代码中的$Gauss()$是辗转相除求解,$Gauss2()$是通过求逆元求解(貌似我的辗转相除更快(雾)) #include<cstdio> #include<iostream> #include<cst…