CodeForces精选笔记
\color{purple}\text{Deletion of Repeats}
\color{red}\text{Rating:2100}
\color{green}\text{time:2023.3.8}
莫名出现的东西必有猫腻。
本题核心在于每个字符最多出现
\color{purple}\text{Greedy Change}
\color{red}\text{Rating:2600}
\color{green}\text{time:2023.3.9}
有时侯越是深入,越难看清,不如置身世外,跟着感觉走。
我们记答案为
其实我们都不难感觉到,大概要找一个接近一种货币
方法是设定一个最下界货币
关键变成了枚举这个
确定了合法的
嗯,然后就结束了。其实看到这里你肯定还是不明白,没关系,因为我也不明白。冗杂的证明看不来,尚且能根据人类的推理能力得出答案。
其实世界就是这样呢,有时候不需要知道为什么,也会勇敢地尝试。
\color{purple}\text{Galaxy Union}
\color{red}\text{Rating:2700}
\color{green}\text{time:2023.3.12}
简化题面:给定一个
先考虑普通的树怎么做:U285295 的 & 树 。
以一号点为根,怎么求出他到其他点的距离?也许可以树形
void work(int u,int fa){
sze[u]=1;
for(int i=head[u];i;i=last[i]){
int v=to[i];if(v==fa || bk[v]==2)continue;//暂时忽略bk[v]==2
work(v,u);
sze[u]+=sze[v];
dp[u]+=dp[v]+w[i]*sze[v];
}
return;
}
然后呢?然后是换根
void tree_dp(int u,int fa){
ans[u]=dp[u];
for(int i=head[u];i;i=last[i]){
int v=to[i];if(v==fa || bk[v]==2)continue;//暂时忽略bk[v]==2
int r1=dp[u],r2=sze[u],r3=dp[v],r4=sze[v];
dp[u]-=dp[v]+sze[v]*w[i];sze[u]=n-sze[v];
dp[v]+=dp[u]+sze[u]*w[i];sze[v]=n;
tree_dp(v,u);
dp[u]=r1,sze[u]=r2;
dp[v]=r3,sze[v]=r4;//还原
}
return;
}
完成这些后即可通过弱化版的此题。 接下来考虑基环树上:
首先找环,这里不多说了。
然后对环上每个点向它的子树做一次树形
接下来考虑以
显然有一个性质,对于点
\color{purple}\text{Pairs}
\color{red}\text{Rating:2700}
\color{green}\text{time:2023.3.14}
简化题面:给定基环树(森林),每个点被染为白或黑色,求基环树的最大匹配,且此时黑色与白色的匹配数量最大。
还是先考虑树上怎么做,考虑树形
然后考虑基环树,显然我们可以删掉一条边变成一棵树,然后枚举这条边选不选,即可得到答案(其实我不是这么写的,但思路大致相同)。
最后提一些细节,如果出现基环树变树的情况,请一定要去重边;以及我
\color{purple}\text{Help Shrek and Donkey}
\color{red}\text{Rating:2700}
\color{green}\text{time:2023.3.15}
且不说怎么推概率,欺骗策略真的很好玩。
这里主要写一下纳什均衡。
任何一位玩家在此策略组合下单方面改变自己的策略(其他玩家策略不变)都不会提高自身的收益。
例如这题,(图片来自题解)
显然,当我们确定先手