2024.8.12

news2024/11/13 18:51:09

2024.8.12 【梦最让我费解的地方在于,明明你看不清梦里人们的脸,却清晰地知道他们是谁。】

Monday 七月初九


序理论

最小链覆盖&最长反链长度

我们设定一个二元关系符R和一个集合A

我们设定<A,R>这样一个类群,那么对于任意 a i ∈ A , a j ∈ A a_i\in A,a_j \in A aiA,ajA, 二元关系式$a_i\ R\ a_j $将返还一个bool值作为结果

在此类群中,我们对二元关系符做如下规定

  1. 自反性(reflexive) ( ∀ a i ∈ A ) , a i   R   a i   = t r u e (\forall a_i \in A),a_i \ R \ a_i \ = true (aiA),ai R ai =true
  2. 反对称性(antisymmetric) ( ∀ a , b ∈ A ) , a   R   b   = t r u e ⇒ a   =   b (\forall a,b \in A),a \ R \ b \ = true \Rightarrow a\ =\ b (a,bA),a R b =truea = b
  3. 传递性(transitive) ( ∀ a , b , c ∈ A ) , a   R   b   = t r u e , b   R   c   = t r u e ⇒ a   R   c   = t r u e (\forall a,b,c\in A),a\ R \ b\ =true ,b\ R\ c\ =true \Rightarrow a\ R\ c\ = true (a,b,cA),a R b =true,b R c =truea R c =true

那么对于这个类群的最小链覆盖为
B ⊂ A , ∀   x ∈ B ∃   y ∈ B ⇒ x   R   y   = t r u e ∨ y   R   x   = t r u e B \subset A,\forall \ x \in B \\ \exists \ y \in B\Rightarrow \\ x\ R\ y\ = true \vee y\ R\ x\ = true BA, xB yBx R y =truey R x =true
B为满足条件的最小集

最长反链覆盖为

B ⊂ A , ∀   x ∈ B ∀   y ∈ B ⇒ ¬ ( x   R   y   = t r u e ∨ y   R   x   = t r u e ) B \subset A,\forall \ x \in B \\ \forall \ y \in B\Rightarrow \\ \neg (x\ R\ y\ = true \vee y\ R\ x\ = true) BA, xB yB¬(x R y =truey R x =true)
B为符合条件的最大集

Dilworth 定理

对于一个这样的类集,最小链覆盖是等于最长反链覆盖的

显然,当 ∣ A ∣ < = 3 |A|<=3 A<=3时,一定成立

我们设存在集合 C C C使得其满足该定理

使其宽度为K,若 C C C中任意元素均不可比,该定理显然成立

否则在该集合中取出一条长度大于1的链,令其中链首为 m m m,链尾为 M M M

T = A ∖ { m , M } T=A\setminus\{m,M\} T=A{m,M},若 T中的宽度不超过 d − 1 d-1 d1,则由归纳假设知 T T T可被至多$ d-1$条链覆盖,进而 S S S 可被这些链再加上链 { m , M } \{m,M\} {m,M}覆盖,命题成立,否则说明 T T T中的宽度也为 d d d,令 T T T 中最长的一条反链为 B B B

我们考虑如下两个集合:
A + = { x ∈ A : ( ∃ a ∈ B )   a ⪯ x } A − = { x ∈ A : ( ∃ a ∈ B )   x ⪯ a } A^+=\{x\in A:(\exists a\in B) \ a \preceq x\}\\ A^-=\{x\in A:(\exists a\in B) \ x \preceq a\}\\ A+={xA:(aB) ax}A={xA:(aB) xa}
我们很难不发现
A + ⊔ A − = A A + ⊓ A − = B ∣ A + ∣ < ∣ A ∣ , ∣ A − ∣ < ∣ A ∣ A^+\sqcup A^- = A\\ A^+\sqcap A^- = B\\ |A^+|<|A|,|A^-|<|A| A+A=AA+A=BA+<A,A<A
S + , S − S^+,S^- S+,S分别进行数学归纳

那么两个集合最小链覆盖数是 d d d,且均包含 B B B中一个元素

命题得证


[[ARC165E] Random Isolation]([ARC165E] Random Isolation - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

[ARC165E] Random Isolation

题面翻译

给一棵 n n n 个节点的树和一个整数 K K K。每次操作,等概率随机选一个所在连通块大小大于 K K K 的点,并删掉这个点和与之相连的所有边。重复操作直到图上所有连通块大小不超过 K K K,求期望操作次数,答案对 998244353 998244353 998244353 取模。

1 ≤ K < N ≤ 100 1\le K < N\le 100 1K<N100

translated by yxcat.

题目描述

頂点に $ 1 $ から $ N $ の番号が付いた $ N $ 頂点からなる木があります。 $ i $ 番目の辺は頂点 $ A_i,B_i $ を結びます。

グラフの連結成分が含む頂点の数がそれぞれ $ K $ 以下になるまで以下の操作を行い続けます。

  • $ N $ 個の頂点のうち、$ K+1 $ 個以上の頂点を含む連結成分に属する頂点を $ 1 $ つ一様ランダムに選ぶ。選んだ頂点を端点とする辺をすべて削除する。

操作を行う回数の期待値を $ \bmod\ 998244353 $ で求めてください。

期待値 $ \text{mod\ }{998244353} $ の定義 求める期待値は必ず有理数になることが証明できます。 また、この問題の制約のもとでは、その値を既約分数 $ \frac{P}{Q} $ で表した時、$ Q\ \not\ \equiv\ 0\ \pmod{998244353} $ となることも証明できます。 よって、$ R\ \times\ Q\ \equiv\ P\ \pmod{998244353},\ 0\ \leq\ R\ &lt\ 998244353 $ を満たす整数 $ R $ が一意に定まります。 この $ R $ を答えてください。

输入格式

入力は以下の形式で標準入力から与えられます。

$ N $ $ K $ $ A_1 $ $ B_1 $ $ A_2 $ $ B_2 $ $ \vdots $ $ A_{N-1} $ $ B_{N-1} $

输出格式

答えを出力してください。

样例 #1

样例输入 #1

4 2
1 2
2 3
2 4

样例输出 #1

249561090

样例 #2

样例输入 #2

20 10
16 8
6 2
18 3
3 12
5 1
13 9
13 19
3 11
5 13
17 6
8 14
1 16
16 20
11 15
3 10
15 4
5 18
1 7
1 17

样例输出 #2

181196154

提示

制約

  • $ 1\ \leq\ K\ <\ N\ \leq\ 100 $
  • $ 1\ \leq\ A_i,B_i\ \leq\ N $
  • 与えられるグラフは木
  • 入力される値はすべて整数

Sample Explanation 1

例えば $ 1 $ 回目の操作で頂点 $ 2 $ が選ばれた場合、操作によって全ての辺が削除され、操作後は各連結成分が含む頂点の数はそれぞれ $ 2 $ 以下であるため操作を終了します。一方 $ 1 $ 回目の操作で頂点 $ 1 $ が選ばれた場合、操作後頂点 $ 2,3,4 $ からなる連結成分が残るため、$ 2 $ 回目の操作が行われます。 操作回数の期待値は $ \frac{7}{4} $ です。

//2024.8.12
//by white_ice
//[ARC165E] Random Isolation | AT_arc165_e
#include<bits/stdc++.h>
//#include"need.cpp"
using namespace std;
#define int long long
#define itn long long
constexpr int oo = 105;
constexpr int mod=998244353;
int n,m;
itn siz[oo],f[oo][oo][oo],g[oo][oo];
int c[oo<<1],ic[oo<<1];
struct nod{int to[oo<<1],nxt[oo<<1],head[oo],tot;
__inline void adde(int u,int v){to[++tot]=v,nxt[tot]=head[u],head[u]=tot;}}S;
__inline int qpow(int x,int y){int ans=1;while (y){
    if(y&1)ans=ans*x%mod;y>>=1;x=x*x%mod;}return ans;}
__inline void dfs(int u,int fa){
    siz[u]=1,f[u][1][0]=1;
    for (int i=S.head[u];i;i=S.nxt[i]){
        int v=S.to[i];
        if (v==fa) continue;
        dfs(v,u);
        for (int j=siz[u]+siz[v];j>=0;j--)
            for (int k=siz[u]+siz[v];k>=0;k--)
                g[j][k]=f[u][j][k],f[u][j][k]=0;
        for (int j=siz[u];j>=1;j--)
            for (int k=siz[u]-j;k>=0;k--){
                f[u][j][k+1]=(f[u][j][k+1]+g[j][k])%mod;
                for (int p=siz[v];p>=1;p--)
                    for (int q=siz[v]-p;q>=0;q--){
                        f[u][j+p][k+q]=(f[u][j+p][k+q]+g[j][k]*f[v][p][q]%mod)%mod;
                    }                
            }
        siz[u]+=siz[v];
    }
}
main(void){
	//fre();
	cin.tie(0)->sync_with_stdio(0);
    c[0]=ic[0]=1;
    for (int i=1;i<=200;i++)	
		c[i]=c[i-1]*i%mod;
    ic[200]=qpow(c[200],mod-2);
    for (int i=200-1;i>=1;i--)	
		ic[i]=ic[i+1]*(i+1)%mod;
	cin >> n >> m ;
    for (int u,v,i=1;i<n;i++){
        cin >> u >> v;
        S.adde(u,v),S.adde(v,u);
    }
    dfs(1,0);
    int ans=0;
    for (int u=1;u<=n;u++){
        for (int i=m+1;i<=siz[u];i++){
            for (int j=0;j<=siz[u]-i;j++)
                ans=(ans+f[u][i][j]*c[i]%mod*c[j+(u!=1)]%mod*ic[i+j+(u!=1)]%mod)%mod;//,cout<<u<<" "<<i<<" "<<j<<" "<<f[u][i][j]<<"\n";
        }
    }
    cout << ans <<"\n";
    exit(0);
}

我们考虑,既然是计算概率,

那么对于一棵树,我们不妨将其转化为一个序列来考虑

我们假设一个序列s,我们从这个序列中选出n个点,假设已经从s中选出了x个点,那么又有n-x个点在剩余的序列中选择

1

(其中椭圆为要去除的点)

1

(红色部分为去除的)

那么后面的部分有n-x个点可以被选择,后半部分共k个点

那么我们将k自由组合排序,考虑第一个被选择的点

这些点的选择概率都是 1 n − x \frac{1}{n-x} nx1,所以我们考虑组合意义,共 ( n − x ) ! ( k − n + x ) ! k ! \frac{(n-x)!(k-n+x)!}{k!} k!(nx)!(kn+x)!种可能

通过这种转化,我们将求解概率变为了计数问题

那么我们应该考虑如何取出点了

对于一个子树T,|T|>k,对于这个子树,我们一定可以对这一棵子树进行操作

那么我们就可以统计子树大小大于k的个数

那么他的贡献就是T出现的概率我们设T出现的概率是 p ( T ) p(T) p(T),那么答案的总期望就是 ∑ s i z e T > k p ( T ) \sum_{size_T>k}p(T) sizeT>kp(T)

关于这个统计,使用树形DP求解总数即可

f [ x ] [ i ] [ j ] f[x][i][j] f[x][i][j]为为 x x x子树中选了包含 x x x 在内的 i i i 个点,有 j j j 个点与之相连的方案数,使用背包转移即可

[P3974 [TJOI2015] 组合数学]([P3974 TJOI2015] 组合数学 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

[TJOI2015] 组合数学

题目描述

为了提高智商,ZJY 开始学习组合数学。某一天她解决了这样一个问题:给一个网格图,其中某些格子有财宝。每次从左上角出发,只能往右或下走。问至少要走几次才可能把财宝全捡完。

但是她还不知足,想到了这个问题的一个变形:假设每个格子中有好多块财宝,而每一次经过一个格子至多只能捡走一块财宝,其他条件不变,至少要走几次才可能把财宝全捡完?

这次她不会做了,你能帮帮她吗?

输入格式

第一行为一个正整数 t t t,表示数据组数。

每组数据的第一行是两个正整数 n n n m m m,表示这个网格图有 n n n m m m 列。

接下来 n n n 行,每行 m m m 个非负整数,表示这个格子中的财宝数量( 0 0 0 表示没有财宝)。

输出格式

对于每组数据,输出一个整数,表示至少走的次数。

样例 #1

样例输入 #1

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

样例输出 #1

10

提示

数据范围

对于 30 % 30\% 30% 的数据, n ≤ 5 n \le 5 n5 m ≤ 5 m \le 5 m5,每个格子中的财宝数不超过 5 5 5 块。

对于 50 % 50\% 50% 的数据, n ≤ 100 n \le 100 n100 m ≤ 100 m \le 100 m100,每个格子中的财宝数不超过 1000 1000 1000 块。

对于 100 % 100\% 100% 的数据, 1 ≤ t ≤ 2 1\le t\le 2 1t2 1 ≤ n ≤ 1000 1\le n \le 1000 1n1000 1 ≤ m ≤ 1000 1\le m \le 1000 1m1000,每个格子中的财宝不超过 1 0 6 10^6 106 块。

//2024.8.12
//by white_ice
//[TJOI2015] 组合数学 | P3974
#include<bits/stdc++.h>
//#include"need.cpp"
using namespace std;
#define itn long long
#define int long long
constexpr int oo = 1003;
itn n,m;itn st[oo][oo];
int f[oo][oo];
main(void){
    //fre();
    cin.tie(0)->sync_with_stdio(0);
    itn t;cin >> t;
while (t--){
    memset(f,0,sizeof(f));
    cin >> n >> m;
    for (itn i=1;i<=n;i++)for (int j=1;j<=m;j++)cin >> st[i][j];
    for (itn i=1;i<=n;i++)for (itn j=m;j>=1;j--){
        f[i][j] = max(f[i-1][j],f[i][j+1]);
        f[i][j] = max(f[i-1][j+1]+st[i][j],f[i][j]);
    }
    cout << f[n][1] << '\n';
}
    cout << flush;
    exit (0);
}

我们使用,使用,使用了一段及其短小精悍的代码解决了这道题

这道题,就要使用我们上面提到的最小链覆盖&最长反链长度

我们不难发现,对于这个网格图,在上面移动就是构造一个链的过程

从一个方格出发,可以向下或向右移动

左右我们就是要求解从第一行第一列出发,移动到最后一列最后一行的最长链长度

这是我们就可以搬出这个:Dilworth 定理

最小链覆盖 = 最长反链长度

那么我们求解最长反链长度就好啦

我们如何求解呢?对于一个格子,什么地方不能成链呢?

当然是x,y坐标一个大于该格子一个小于该格子的时候啦)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

酒店行业如何利用XML进行营销短信

随着信息社会的到来&#xff0c;消费者获得会所的服务也从单纯的电话方式&#xff0c;逐渐转变为电话、互联网、传真&#xff0c;群发短信等多种媒体并行的方式。今天着重介绍下酒店行业如何利用短信平台进行营销。 群发短信业务对酒店起到的效率&#xff1a;根据新产品或服务向…

20240813 每日AI必读资讯

Flux生成网红博主因太逼真爆火&#xff01;有人用Claude写代码识破“AI美女” - Flux生成的情侣合照逼真程度达到恐怖级别&#xff0c;挑战人类视觉辨识能力。 - 网友发现Flux生成的照片几乎完美&#xff0c;但仍有细微瑕疵可供识别。 - 有人利用Flux等工具制作逼真的YouTub…

分班查询一键发布,老师们都在用

新学期的钟声即将敲响&#xff0c;校园里又将迎来一批充满好奇和期待的新生。对于老师们来说&#xff0c;这不仅仅是一个新起点&#xff0c;更是一项挑战——如何高效而准确地将新生的分班信息传达给每一位家长。传统的方法是通过私信逐一发送&#xff0c;这不仅耗时耗力&#…

【Story】不同操作系统的命令行命令对比

目录 表格汇总1&#xff1a;Windows CMD、Windows PowerShell、Linux Shell、macOS Terminal详细说明表格汇总2&#xff1a;Windows CMD、Windows PowerShell、Linux Shell、macOS Terminal详细说明结束语 以下的表格&#xff0c;包括了不同操作系统的命令行命令对比&#xff0…

仿Muduo库实现高并发服务器——Buffer模块

Buffer模块并没有什么复杂错误。 上图反应了下面代码的各种操作。 #define BUFFER_DEFAULT_SIZE 1024 class Buffer {private:std::vector<char> _buffer; //使用vector进行内存空间管理uint64_t _reader_idx; //读偏移uint64_t _writer_idx; //写偏移public:Buffer():_…

Ubuntu24.04、22.04或20.04安装Golang方法教程

在Ubuntu Linux&#xff08;例如 Ubuntu 24.04、22.04 或 20.04&#xff09;上安装Go&#xff08;Golang&#xff09;是一个简单的过程。我们可以使用默认系统存储库使用本教程中给出的命令下载开源 Go 编程语言&#xff0c;轻松构建简单、可靠和高效的软件。 Go语言由Google…

LoadRunner内置参数介绍

参数菜单 我用的是2023版本&#xff0c;每个版本的位置不一样&#xff0c;通常差不多&#xff0c;2种方式进入参数菜单 菜单栏进入参数 点击设计 - 参数 - 参数列表 脚本右键进入参数 选中你要参数化的内容&#xff0c;右键&#xff1a;使用参数替换 - 参数列表 参数列表 …

day16:一文弄懂函数对象、函数嵌套和函数闭包的关系和应用

1.函数的对象 精髓&#xff1a;可以把函数当成变量去用 1.1 可以赋值 # func内存地址 def func():print(from func)ffunc print(f,func) f()输出&#xff1a; <function func at 0x0000017A4E24F7F0> <function func at 0x0000017A4E24F7F0> from func 1.2 可以…

PythonStudio 控件使用常用方式(十四)TCheckListBox

PythonStudio是一个极强的开发Python的IDE工具&#xff0c;它使用的是Delphi的控件&#xff0c;常用的内容是与Delphi一致的。但是相关文档并一定完整。现在我试试能否逐步把它的控件常用用法写一点点&#xff0c;也作为PythonStudio的参考。 从1.2.1版开始&#xff0c;Python…

视频融合项目中的平台抉择:6大关键要素助力精准选型

随着安防监控系统行业的快速发展&#xff0c;视频融合项目逐渐成为城市治理、企业管理及智能建筑等领域的重要组成部分。视频融合平台作为视频数据整合、管理和分析的核心&#xff0c;其选择直接影响到项目的成功与否。 在当前智慧业务类项目的集成过程中&#xff0c;我们不仅…

漂亮网站是门面,和你的豪车、奢侈品、秘书一样,该投就得投。

对于企业来说&#xff0c;一个漂亮的网站可以起到很好的门面作用。一个好的网站可以让客户更容易地找到你的产品和服务&#xff0c;提高品牌形象和知名度&#xff0c;增加业务成功几率。因此&#xff0c;对于企业来说&#xff0c;投资于一个漂亮的网站是非常必要的。 经常看到…

用Python实现9大回归算法详解——01线形回归算法

1. 线性回归的基本概念 线性回归是一种最基本的监督学习算法&#xff0c;用于预测因变量&#xff08;目标变量&#xff09;和一个或多个自变量&#xff08;特征变量&#xff09;之间的关系。线性回归假设因变量与自变量之间的关系是线性的&#xff0c;即可以用以下形式的线性方…

2024国赛Word论文模板【一键生成式操作】

一、比赛介绍 该竞赛创办于1992年&#xff0c;每年一届&#xff0c;是首批列入“高校学科竞赛排行榜”的19项竞赛之一。2023年&#xff0c;来自全国及美国、澳大利亚、马来西亚的1685所院校/校区、59611队(本科54158队、专科5453队)、近18万人报名参赛。 而今年的国赛马上就要…

《Unity3D网络游戏实战》正确收发数据流

TCP数据流 系统缓冲区 当收到对端数据时&#xff0c;操作系统会将数据存入到Socket的接收缓冲区中 操作系统层面上的缓冲区完全由操作系统操作&#xff0c;程序并不能直接操作它们&#xff0c;只能通过socket.Receive、socket.Send等方法来间接操作。当系统的接收缓冲区为空&…

C#去掉文件夹或文件名非法字符

实现有输入字符串创建文件夹的功能&#xff0c;需要检查字符串中是否包含不能在文件夹中使用的非法字符 。C#中如果需要生成文件路径&#xff0c;有时会抛出“文件路径中出现非法字符”的异常&#xff0c;这时我们就会找到这个非法的字符串&#xff0c;然后Replace替换掉。net类…

牛客JS题(四十)字体高亮

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式逆向思路 题干&#xff1a; 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /></head><body><input type"text&…

图形编辑器基于Paper.js教程14:使用 Paper.js 绘制数学图形与交互的实现,画布缩放保持大小的圆,正弦,余弦,螺旋线

技术分析&#xff1a;使用 Paper.js 绘制数学图形与交互的实现 在现代Web开发中&#xff0c;动态图形和交互式视觉表现已成为提升用户体验的重要手段。通过一个详细的示例&#xff0c;我们将探索如何使用 Paper.js 进行数学图形&#xff08;正弦曲线、余弦曲线和螺旋线&#x…

拯救打工人的4款可ai生成ppt神器大PK,谁是加班狗的最爱?

在忙碌的工作日常里&#xff0c;做PPT常常让不少上班族头疼。晚上加班时&#xff0c;办公室里总能看到那些为了做出完美PPT而熬夜的人。不过现在好了&#xff0c;科技进步带来了好消息&#xff0c;有几款AI生成PPT的神器出现了&#xff0c;今天&#xff0c;咱们就来比一比&…

网络编程----TCP/IP协议

使用TCP/IP协议实现客户端和服务器端进行通信: 1.服务器端(test1.c): #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <stdio.h> #include <unistd.h>// 创建服务器端 int main() {//1.创建套接字int serfd…