线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze

多类型高斯消元杂题

  • [SDOI2010]外星千足虫
    • description
    • solution
    • code
  • [HNOI2013]游走
    • description
    • solution
    • code
  • [HNOI2011]XOR和路径
    • description
    • solution
    • code
  • Maze(树上高斯消元)
    • problem
    • solution
    • code

[SDOI2010]外星千足虫

description

solution

高斯消元的模板题

虽然感觉问了个最早确定所有虫的时间戳,但并没有什么用

在高斯消元过程中,使用的最大行编号就是最早确定时间

code

#include <cstdio>
#include <bitset>
#include <iostream>
using namespace std;
#define maxn 1005
int n, m;
bitset < maxn > a[maxn << 1];int main() {scanf( "%d %d", &n, &m );for( int i = 1, x;i <= m;i ++ ) {for( int j = 1;j <= n;j ++ )scanf( "%1d", &x ), a[i][j] = x;scanf( "%d", &x ), a[i][n + 1] = x;}int ans = 0;for( int i = 1;i <= n;i ++ ) {int row = i;while( row <= m && ! a[row][i] ) row ++;if( row == m + 1 ) return ! printf( "Cannot Determine\n" );if( i ^ row ) swap( a[row], a[i] );ans = max( ans, row );for( int j = 1;j <= m;j ++ )if( i == j || ! a[j][i] ) continue;else a[j] ^= a[i];}printf( "%d\n", ans );for( int i = 1;i <= n;i ++ )if( a[i][n + 1] ) printf( "?y7M#\n" );else printf( "Earth\n" );return 0;
}

[HNOI2013]游走

description

solution

将路径拆分成每条边期望经过次数乘以边权的求和

贪心的把最大权值放在期望经过次数最少的边上

但是边的级别是空间时间不足以承受的

事实上,边的期望至于边连接的两个端点有关

每个点到与之相连边的概率一样,期望一样

所以到某条特定边的期望就是经过该点期望除以该点连接的总边数

一条边被经过的期望则是两个端点到这条边的期望和

于是乎求边的期望就转化为求点的期望

而点的期望至于相邻点有关

Ei:iE_i:iEi:i点期望,numi:inum_i:inumi:i点总边数,x1,x2,...,xkx_1,x_2,...,x_kx1,x2,...,xkiii相连,则有Ei=∑j=1kEjnumjE_i=\sum_{j=1}^k\frac{E_j}{num_j}Ei=j=1knumjEj

每个点都能列出一个这样的方程,高斯消元解决

特别地,游走是从点111开始的,所以期望要+1+1+1,游走到点nnn就不会继续进行了,所以计算期望时不能纳入考虑

code

#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 505
#define eps 1e-6
#define maxm 125005
vector < int > G[maxn]; 
int n, m;
int num[maxn], from[maxm], to[maxm];
double E[maxm];
double x[maxn][maxn];double Fabs( double x ) {return x < 0 ? -x : x;
}int main() {scanf( "%d %d", &n, &m );for( int i = 1, u, v;i <= m;i ++ ) {scanf( "%d %d", &u, &v );G[u].push_back( v );G[v].push_back( u );from[i] = u, to[i] = v;num[u] ++, num[v] ++;}x[1][n] = 1;for( int i = 1;i < n;i ++ ) {x[i][i] = 1;for( auto j : G[i] )if( j != n )x[i][j] = -1.0 / num[j];}for( int i = 1;i < n;i ++ ) {int k = i;for( int j = i + 1;j < n;j ++ )if( Fabs( x[j][i] ) > Fabs( x[k][i] ) )k = j;if( i ^ k ) swap( x[i], x[k] );for( int j = n;j >= i;j -- )x[i][j] /= x[i][i];for( int j = 1;j < n;j ++ )if( i ^ j )for( int k = n;k >= i;k -- )x[j][k] -= x[j][i] * x[i][k];}for( int i = 1;i <= m;i ++ ) {if( from[i] != n )E[i] += x[from[i]][n] / num[from[i]];if( to[i] != n )E[i] += x[to[i]][n] / num[to[i]];}sort( E + 1, E + m + 1 );double ans = 0;for( int i = 1;i <= m;i ++ )ans += E[i] * ( m - i + 1 );printf( "%.3f", ans );return 0;
} 

[HNOI2011]XOR和路径

description

solution

一般看到充满二进制意味的异或都要考虑拆位

此题也不例外,每一个单独计算期望

fi:f_{i}:fi: 表示i→ni\rightarrow nin路径该位为111的概率,则1−fi1-f_i1fi表示i→ni\rightarrow nin路径为000的概率,di:id_i:idi:i的出度

∀(u,v)∈Edgefu=1du(∑w(u,v)=0fv+∑w(u,v)=1(1−fv))⇔∀(u,v)∈Edgedu×fu=(∑w(u,v)=0fv+∑w(u,v)=1(1−fv))\forall_{(u,v)\in Edge}f_u=\frac{1}{d_u}\Big(\sum_{w(u,v)=0}f_v+\sum_{w(u,v)=1}(1-f_v)\Big)\Leftrightarrow \forall_{(u,v)\in Edge}d_u\times f_u=\Big(\sum_{w(u,v)=0}f_v+\sum_{w(u,v)=1}(1-f_v)\Big)(u,v)Edgefu=du1(w(u,v)=0fv+w(u,v)=1(1fv))(u,v)Edgedu×fu=(w(u,v)=0fv+w(u,v)=1(1fv))
在这里插入图片描述

换言之,u→nu\rightarrow nun的路径想要为1:1:1:如果(u→v)(u\rightarrow v)(uv)这条边为111,必须v→nv\rightarrow nvn的路径为000,否则为111

方程化为

dufu−∑w(u,v)=0fv+∑w(u,v)=1fu=∑w(u,v)=11d_uf_u-\sum_{w(u,v)=0}f_v+\sum_{w(u,v)=1}f_u=\sum_{w(u,v)=1}1dufuw(u,v)=0fv+w(u,v)=1fu=w(u,v)=11

高斯消元,ans=∑i2ifi(1)ans=\sum_i2^if_i(1)ans=i2ifi(1)

code

#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
#define eps 1e-8
#define maxn 105
vector < pair < int, int > > G[maxn];
int n, m;
int d[maxn];
double ans[maxn];
double a[maxn][maxn];double Fabs( double x ) {return x < 0 ? -x : x;
}void build( int x ) {a[n][n] = 1;for( int i = 1;i < n;i ++ ) {a[i][i] = d[i];for( auto j : G[i] ) {if( j.second & x ) a[i][j.first] ++, a[i][n + 1] ++;else a[i][j.first] --;		}}
}void gauss() {for( int i = 1;i <= n;i ++ ) {int k = i;for( int j = i;j <= n;j ++ )if( Fabs( a[j][i] ) > Fabs( a[k][i] ) )k = j;if( k ^ i ) swap( a[i], a[k] );for( int j = i + 1;j <= n;j ++ )if( Fabs( a[j][i] ) < eps ) continue;else {double t = a[j][i] / a[i][i];for( k = i;k <= n + 1;k ++ )a[j][k] -= a[i][k] * t;a[j][i] = 0;}}for( int i = n;i;i -- ) {for( int j = i + 1;j <= n;j ++ )a[i][n + 1] -= a[i][j] * ans[j];ans[i] = a[i][n + 1] / a[i][i];}memset( a, 0, sizeof( a ) );
}int main() {scanf( "%d %d", &n, &m );int maxx = 0;for( int i = 1, u, v, w;i <= m;i ++ ) {scanf( "%d %d %d", &u, &v, &w );G[u].push_back( make_pair( v, w ) );d[u] ++;if( u ^ v ) {G[v].push_back( make_pair( u, w ) );d[v] ++;}maxx = max( maxx, w );}double ret = 0;for( int i = 1;i <= maxx;i <<= 1 ) {build( i );gauss();ret += ans[1] * i;}printf( "%.3f\n", ret );return 0;
} 

Maze(树上高斯消元)

problem

solution

Ei:iE_i:iEi:i节点逃出期望经过的边数,edgei:iedge_i:iedgei:i相连边数
∀i,i∈leafEi=ki×E1+ei×0+(1−ki−ei)×(Efai+1)=ki×E1+(1−ki−ei)×Efai+(1−ki−ei)\forall_{i,i\in leaf}E_i=k_i\times E_1+e_i\times 0+(1-k_i-e_i)\times (E_{fa_i}+1)\\=k_i\times E_1+(1-k_i-e_i)\times E_{fa_i}+(1-k_i-e_i) i,ileafEi=ki×E1+ei×0+(1kiei)×(Efai+1)=ki×E1+(1kiei)×Efai+(1kiei)

∀i,i∉leafEi=ki×E1+ei×0+(1−ki−ei)×1edgei×(∑j∈soni(Ej+1)+Efai+1)=ki×E1+1−ki−eiedgei×Efai+1−ki−eim×∑j∈soniEj+(1−ki−ei)\forall_{i,i\notin leaf}E_{i}=k_i\times E_1+e_i\times 0+(1-k_i-e_i)\times\frac{1}{edge_i}\times\Big(\sum_{j\in son_i}(E_j+1)+E_{fa_i}+1\Big)\\=k_i\times E_1+\frac{1-k_i-e_i}{edge_i}\times E_{fa_i}+\frac{1-k_i-e_i}{m}\times\sum_{j\in son_i}E_j+(1-k_i-e_i) i,i/leafEi=ki×E1+ei×0+(1kiei)×edgei1×(jsoni(Ej+1)+Efai+1)=ki×E1+edgei1kiei×Efai+m1kiei×jsoniEj+(1kiei)

转移涉及父亲儿子且彼此依赖,而我们非常想得到不交叉的线性递推关系

想办法变成只跟父亲有关的转移,形式的设Ei=Ai×E1+Bi×Efai+CiE_i=A_i\times E_1+B_i\times E_{fa_i}+C_iEi=Ai×E1+Bi×Efai+Ci

类比解方程组,列出以下式子

∀i,i∉leaf\forall_{i,i\notin leaf}i,i/leaf
∑j∈soniEj=∑j∈soniAj×E1+Bj×Efaj+Cj=∑j∈soniAj×E1+Bj×Ei+Cj\sum_{j\in son_i}E_j=\sum_{j\in son_i}A_j\times E_1+B_j\times E_{fa_j}+C_j=\sum_{j\in son_i}A_j\times E_1+B_j\times E_i+C_j\\ jsoniEj=jsoniAj×E1+Bj×Efaj+Cj=jsoniAj×E1+Bj×Ei+Cj

Ei=kiE1+1−ki−eiedgeiEfai+1−ki−eim∑j∈soniEj+(1−ki−ei)=kiE1+1−ki−eiedgeiEfai+1−ki−eiedgei∑j∈soni(AjE1+BjEi+Cj)+(1−ki−ei)E_i=k_iE_1+\frac{1-k_i-e_i}{edge_i}E_{fa_i}+\frac{1-k_i-e_i}{m}\sum_{j\in son_i}E_j+(1-k_i-e_i)\\=k_iE_1+\frac{1-k_i-e_i}{edge_i}E_{fa_i}+\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}(A_jE_1+B_jE_i+C_j)+(1-k_i-e_i) Ei=kiE1+edgei1kieiEfai+m1kieijsoniEj+(1kiei)=kiE1+edgei1kieiEfai+edgei1kieijsoni(AjE1+BjEi+Cj)+(1kiei)
在这里插入图片描述

⇔\Leftrightarrow
(1−1−ki−eiedgei∑j∈soniBj)Ei=(1-\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}B_j)E_i=(1edgei1kieijsoniBj)Ei=(ki+1−ki−eiedgei∑j∈soniAj)E1+1−ki−eiedgeiEfai+(1−ki−ei)+1−ki−eiedgei∑j∈soniCj(k_i+\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}A_j)E_1+\frac{1-k_i-e_i}{edge_i}E_{fa_i}+(1-k_i-e_i)+\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}C_j (ki+edgei1kieijsoniAj)E1+edgei1kieiEfai+(1kiei)+edgei1kieijsoniCj
⇒Ai=ki+1−ki−eiedgei∑j∈soniAj(1−1−ki−eiedgei∑j∈soniBj)\Rightarrow A_i=\frac{k_i+\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}A_j}{(1-\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}B_j)}Ai=(1edgei1kieijsoniBj)ki+edgei1kieijsoniAjBi=1−ki−eiedgei(1−1−ki−eiedgei∑j∈soniBj)B_i=\frac{\frac{1-k_i-e_i}{edge_i}}{(1-\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}B_j)}Bi=(1edgei1kieijsoniBj)edgei1kieiCi=(1−ki−ei)+1−ki−eiedgei∑j∈soniCj(1−1−ki−eiedgei∑j∈soniBj)C_i=\frac{(1-k_i-e_i)+\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}C_j}{(1-\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}B_j)} Ci=(1edgei1kieijsoniBj)(1kiei)+edgei1kieijsoniCj
在这里插入图片描述

∀i,i∈leaf\forall_{i,i\in leaf}i,ileaf
Ei=ki×E1+(1−ki−ei)×Efai+(1−ki−ei)=Ai×E1+Bi×Efai+Ci⇒{Ai=kiBi=1−ki−eiCi=1−ki−eiE_i=k_i\times E_1+(1-k_i-e_i)\times E_{fa_i}+(1-k_i-e_i)=A_i\times E_1+B_i\times E_{fa_i}+C_i\\ \Rightarrow \begin{cases}A_i=k_i\\B_i=1-k_i-e_i\\C_i=1-k_i-e_i\end{cases} Ei=ki×E1+(1kiei)×Efai+(1kiei)=Ai×E1+Bi×Efai+CiAi=kiBi=1kieiCi=1kiei
从叶子节点开始倒着往上递推(也被称之为树上高斯消元)

树上高斯消元

把有关父亲和儿子的递推式通过Aix+Biy+CiA_ix+B_iy+C_iAix+Biy+Ci的形式转化为只由一方单向线性递推

然后正着/倒着递推消元

直到算出A1,B1,C1A_1,B_1,C_1A1,B1,C1

E1=A1×E1+B1×0+C1⇒E1=C11−A1E_1=A_1\times E_1+B_1\times 0+C_1\Rightarrow E_1=\frac{C_1}{1-A_1}E1=A1×E1+B1×0+C1E1=1A1C1

A1A_1A1无限趋近于111时,无解

如果iiiAi,Bi,CiA_i,B_i,C_iAi,Bi,Ci的分母形式1−1−ki−eiedgei∑j∈soniBj1-\frac{1-k_i-e_i}{edge_i}\sum_{j\in son_i}B_j1edgei1kieijsoniBj趋近于000,也是无解

注意精度问题,eps=1e-8都不行,因为涉及/100/100/100

code

#include <cmath>
#include <cstdio>
#include <vector>
using namespace std;
#define eps 1e-10
#define maxn 10005
vector < int > G[maxn];
int T, n;
double k[maxn], e[maxn], A[maxn], B[maxn], C[maxn];bool dfs( int i, int fa ) {if( G[i].size() == 1 && G[i][0] == fa ) {A[i] = k[i], B[i] = C[i] = 1 - k[i] - e[i];return 1;}A[i] = k[i];B[i] = ( 1 - k[i] - e[i] ) / G[i].size();C[i] = 1 - k[i] - e[i];double t = 0;for( auto j : G[i] ) {if( j == fa ) continue;else if( ! dfs( j, i ) ) return 0;A[i] += A[j] * B[i];C[i] += C[j] * B[i];t += B[j] * B[i];}if( fabs( 1 - t ) < eps ) return 0;else {A[i] /= ( 1 - t );B[i] /= ( 1 - t );C[i] /= ( 1 - t );return 1;}
}int main() {scanf( "%d", &T );for( int Case = 1;Case <= T;Case ++ ) {scanf( "%d", &n );for( int i = 1;i <= n;i ++ )G[i].clear();for( int i = 1, u, v;i < n;i ++ ) {scanf( "%d %d", &u, &v );G[u].push_back( v );G[v].push_back( u );  }for( int i = 1;i <= n;i ++ ) {scanf( "%lf %lf", &k[i], &e[i] );k[i] /= 100, e[i] /= 100;}if( dfs( 1, 0 ) && fabs( 1 - A[1] ) > eps )printf( "Case %d: %f\n", Case, C[1] / ( 1 - A[1] ) );elseprintf( "Case %d: impossible\n", Case );}return 0;
}

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

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

相关文章

Ocelot 资源汇总

前言最近一两年.NET Core的关注度持续上升, 微服务及云原生应用开发上采用.NET Core也越来越多&#xff0c;Ocelot 作为.NET Core平台下一款开源的API 网关开发库越来越得到社区的认可&#xff0c;应用到生产中的案例也有好几百了。春节抽空整理了现有网上公开的Ocelot相关的资…

[TJOI2017]城市(未解决)

[TJOI2017]城市 题意&#xff1a; 一棵树&#xff0c;现在要求你将一条边改变他的位置&#xff0c;&#xff08;即改变左右所连接的端点&#xff0c;权值不变&#xff09;&#xff0c;修改后任意两点相互可达&#xff0c;且使得两个点之间的最大交通费用最小 题解: 有O(n^2…

数论三之组合数学Ⅰ-Max-Min Sums,Binomial Coefficient is Fun,Strivore,Bubble Sort,放棋子,LOJ6671,Iroha and a Grid

组合计数我最爱Max-Min SumsdescriptionsolutioncodeBinomial Coefficient is FundescriptionsolutioncodeStrivoredescriptionsolutioncodeBubble Sortdescriptionsolutioncode[HAOI2016]放棋子descriptionsolutioncodeEntropyIncreaser 与 MinecraftdescriptionsolutioncodeD…

语言之争与读书有感

移动互联网无处不在的今天&#xff0c;不同的学习方式让我们受益颇多。有人喜欢通过手机阅读各类技术专家的公众号分享&#xff1b;有人喜欢通过逛逛不同的博客&#xff0c;来了解当前时下的技术&#xff1b;也有人喜欢通过社区的形式&#xff0c;跟优秀的导师们一起梳理和发展…

CF566E-Restoring Map【bitset】

正题 题目链接:https://www.luogu.com.cn/problem/CF566E 题目大意 有一棵树&#xff0c;但是你不知道它的形态。你现在只知道距离每个点距离不超过222的点集&#xff0c;但是你不知道每个点集是对应哪个点的。 现在要你求这棵树。 2≤n≤10002\leq n\leq 10002≤n≤1000 解…

所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市

今天是春节假期的最后一天&#xff0c;在这里给全国的朋友们拜个晚年&#xff0c;祝大家身体健康&#xff0c;晚年幸福啊。这个春节大家过的怎么样啊&#xff0c;我自己是在老家过的年&#xff0c;家乡的年味还是比较浓的&#xff0c;也再次感谢朋友圈的大家给我看了各地的风光…

数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农

丝且人一口Virus Tree 2descriptionsolutioncodeRGB Coloringdescriptionsolutioncode123 Triangledescriptionsolutioncode[SDOI2016]排列计数descriptionsolutioncode[HNOI2012]排队descriptionsolutioncode[HNOI2011]卡农descriptionsolutioncodeVirus Tree 2 description …

.NET Core开发日志——OData

简述OData&#xff0c;即Open Data Protocol&#xff0c;是由微软在2007年推出的一款开放协议&#xff0c;旨在通过简单、标准的方式创建和使用查询式及交互式RESTful API。类库在.NET Core中想要使用OData功能的话需要添加Microsoft.AspNetCore.OData包。dotnet add package M…

ML.NET 0.10特性简介

IDataView被单独作为一个类库包IDataView组件为表格式数据提供了非常高效的处理方式&#xff0c;尤其是用于机器学习和高级分析应用。它被设计为可以高效地处理高维数据和大型数据集。并且也适合处理属于更大的分布式数据集中的单个数据区块结点。在ML.NET 0.10中&#xff0c;I…

数论五之容斥——硬币购物,Gerald and Giant Chess,幸运数字,Sky Full of Stars,已经没有什么好害怕的了

容斥的神[HAOI2008]硬币购物problemsolutioncodeCF559C Gerald and Giant Chessproblemsolutioncode[SCOI2010]幸运数字problemsolutioncodeCF997C Sky Full of Starsproblemsolutioncode已经没有什么好害怕的了problemsolutioncode[JLOI2015]骗我呢problemsolutioncode容斥要么…

NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇

前言我们都知道&#xff0c;API网关是工作在应用层上网关程序&#xff0c;为何要这样设计呢&#xff0c;而不是将网关程序直接工作在传输层、或者网络层等等更底层的环境呢&#xff1f;让我们先来简单的了解一下TCP/IP的五层模型。&#xff08;图片出自http://www.cnblogs.com/…

Windows 10《描图》应用现已开源

点击上方蓝字关注“汪宇杰博客”《描图》是我最早的Windows 10应用&#xff0c;发布至今已3年多&#xff0c;积累了全球数百万用户&#xff0c;广受好评。现已开源。这款应用为不少小朋友带去了欢乐&#xff0c;体验绘画的乐趣&#xff0c;也帮助过专业用户复刻数百幅古代绘画。…

数论六之计算几何干货——计算几何模板解释全集 及 模板检验训练场

文章目录点和向量及运算直线和线段求解点到直线的距离/点在直线上求解点到线段的距离/点在线段上求解两条线段是否相交求解两直线的交点多边形求解多边形面积求解多边形重心求解判断定点与多边形的位置关系凸包graham扫描法graham扫描法加强版圆求解圆与直线的交点求解圆与圆的…

P3959 [NOIP2017 提高组] 宝藏

P3959 [NOIP2017 提高组] 宝藏 题意: 额题意不好说&#xff0c;就是n个点m个边&#xff0c;选定一个点为根节点&#xff0c;构造一个最小生成树&#xff0c;边的权值为该该边起点到根节点之间的点的数量K&#xff08;不含根节点&#xff09; * 道路长度 1<n<12 0<m&…

如何在ASP.NET Core程序启动时运行异步任务(3)

原文&#xff1a;Running async tasks on app startup in ASP.NET Core (Part 3)作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu之前我写了两篇有关在ASP.NET Core中运行异步任务的博文&#xff0c;本篇博文是对之前两篇博文中演示示例和实现方法的简短跟进。你可以通过…

【NET CORE微服务一条龙应用】应用部署

简介本章主要介绍https://github.com/q315523275/FamilyBucket上微服务一条龙应用&#xff0c;在实际使用中的应用部署&#xff0c;以原始方式部署非docker部署应用主要包括&#xff1a;1、网关应用部署2、授权认证应用部署3、配置中心查询服务端应用部署4、综合管理应用部署5、…

手工修复Azure DevOps无法连接到Azure的问题

点击上方蓝字关注“汪宇杰博客”今天我在为一个从TFVC迁移到Git的老项目重新配置发布到Azure App Service的CI/CD管线的时候&#xff0c;Azure DevOps竟然爆了。这是一个微软已知的bug&#xff0c;目前还未修复&#xff0c;我来带大家看看如何手工workaround这个问题。首先&…

NC14732 锁

NC14732 锁 题意&#xff1a; n个居民&#xff0c;门上有k把锁&#xff0c;每个居民有若干钥匙&#xff0c;为1到k的一个子集&#xff0c;如果几名居民的钥匙的并集是1到k&#xff0c;即他们拥有全部锁的对应钥匙。 求最小的k&#xff0c;使得可以适当地给居民们每人若干钥匙…

.NET Core实战项目之CMS 第十七章 CMS网站系统的部署

目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了&#xff0c;通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了&#xff01;当然这个CMS系统的一些逻辑处理还需要优化&#xff0c;如没有引入日志组件以及缓存功能&#xff0c;权限目前只支持控制到菜单&…

如何用EFCore Lazy Loading实现Entity Split

α角 与 β角支持 现实生活 的 计算机系统&#xff0c;总有着两大偏差&#xff0c;第一个是 现实生活 与 计算机系统 的α角&#xff0c;另外一个是计算机系统的 逻辑设计 与 物理设计 的β角。举个栗子&#xff1a;α角&#xff1a;假设某个公司的商业流程&#xff0c;我们在做…