普及模拟3
发布时间 2023-08-22 14:39:31作者: The_Shadow_Dragon

\(T1\) 最大生成树 \(100pts\)
- 简化题意:给定一个 \(n\) 个点的完全图,给定各点的点权 \(a_i(1 \le i \le n)\) ,两点间的边权为 \(|a_i-a_j|\) ,求该图的最大生成树。
- 正解:贪心,考虑到一个点对答案产生的贡献为 \(\max(a_i-\min\limits_{j=1}^{n} a_j,\max\limits_{j=1}^{n} a_j-a_i)\) ,又因为是完全图,易证得连边后一定是符合题意的解。
ll a[100001];
int main()
{
ll n,i,ans=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
for(i=1;i<=n-1;i++)//只需要n-1条边
{
ans+=max(a[n]-a[i],a[i]-a[1]);
}
cout<<ans<<endl;
return 0;
}
\(T2\) 红黑树 \(80pts\)
\(T3\) 校门外的树 \(0pts\)
- 简化题意:
- 部分分:
- \(30pts\) :\(n^2\) 暴力枚举。
- \(20pts\) :考虑到没有修改操作,维护一下即可。
- 正解:建一棵线段树,
\(T4\) 种树 \(0pts\)
总结
- \(T1、T3、T4\)打到 \(8:30\) ,\(9:30\) 打完 \(T2\) 后就去打高斯消元了,导致没有看见 \(T3\) 的对 \(2^{64}\) 取模(打成了 \(2^{60}\) )。
- \(T4\) 没有再多想想,没骗到计数类型的 \(DP\) 分。