当前位置: 首页 > news >正文

[USACO23OPEN] Triples of Cows P 题解

Link
不太知道为什么评黑。

Sub1

\(O(N^3)\) 的时间复杂度维护邻接矩阵,然后考虑一个点作为 \(b\) 对答案的贡献,应该是 \(deg_u*(deg_u-1)\)

Sub2

bitset 维护上面的东西能卡过去,时间复杂度 \(O(\frac{N^3}{\omega})\)

Sub3

考虑目前算法的瓶颈在哪里,应该是我们删点的时候不能快速维护邻接信息。
考虑一下能不能拆点算贡献,即将一条边 \((u_i,v_i)\) 拆成 \((u_i,n+i)\)\((n+i,v_i)\)
这样将一条边拆开后,我们的一次删除等价于将这个点周围的所有虚点(即编号大于 \(n\) 的点)合并起来。
这样非常好啊。

考虑刻画原来要求的信息。
我们来设 \(x\) 链接 \(a,b\)\(y\) 链接 \(b,c\)

  • \(x=y\)
    贡献为 \(cnt_x(cnt_x +1)(cnt_x-1)\),条件为 \(x\)\(b\) 的儿子。
  • \(x\not= y\) 且都是 \(b\) 的儿子
    贡献为 \((\sum\limits_{x}cnt_x)^2-\sum\limits_{x}cnt_x^2\),条件为 \(x\)\(b\) 的儿子。
  • \(\text{otherwise}\)
    贡献为 \(2cnt_x\sum\limits_{b}\sum\limits_{y} cnt_y\),条件为 \(b\)\(x\) 的儿子,\(y\)\(b\) 的儿子。

考虑如何动态更新这个东西,观察到我们删除一个实点,会将周围的虚点合并,并且会影响到这个实点的父亲,父亲的父亲,改一下要维护的和就行。

Code

#include <bits/stdc++.h>
#define FASTIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int N = 4e5 + 5;
vector<int> vec[N];
int n, ff[N], fa[N];
ll sum1[N], sum2[N], ans;
int find(int x) {return x == ff[x] ? x : ff[x] = find(ff[x]);
}
void dfs(int u) {for (auto v : vec[u]) {if (v == fa[u]) continue;fa[v] = u;dfs(v);if (u <= n)sum1[u] += sum1[v];else {++sum1[u];sum2[u] += sum1[v];}}
}
ll f(ll x) {return x * x * x - x * x - x;
}
int main() {FASTIO;freopen("last.in", "r", stdin);freopen("last.out", "w", stdout);cin >> n;for (int i = 1; i < n; ++i) {int u, v; cin >> u >> v;vec[u].push_back(n + i);vec[n + i].push_back(u);vec[v].push_back(n + i);vec[n + i].push_back(v);}for (int i = 1; i <= n * 2; ++i) ff[i] = i;dfs(n);for (int i = 1; i <= n; ++i) ans += sum1[i] * sum1[i];for (int i = n + 1; i < 2 * n; ++i) ans += f(sum1[i]) + 2 * sum1[i] * sum2[i];for (int u = 1; u <= n; ++u) {cout << ans << '\n';int g = find(fa[u]);int w = fa[g];ll del = -1;ans -= f(sum1[g]) + 2 * sum1[g] * sum2[g] + sum1[w] * sum1[w];sum1[w] -= sum1[g];--sum1[g];sum2[g] -= sum1[u];ans -= sum1[u] * sum1[u];sum1[u] = 0;for (auto v : vec[u]) {if (v == fa[u]) continue;ff[v] = g;sum1[g] += sum1[v];sum2[g] += sum2[v];del += sum1[v];ans -= f(sum1[v]) + 2 * sum1[v] * sum2[v];sum1[v] = sum2[v] = 0;}sum1[w] += sum1[g];ans += f(sum1[g]) + 2 * sum1[g] * sum2[g] + sum1[w] * sum1[w];w = find(fa[fa[g]]);sum2[w] += del;ans += 2 * sum1[w] * del;}return 0;
}
http://www.jsqmd.com/news/917473/

相关文章:

  • VR-Reversal:如何将3D视频转换为普通显示器可观看的2D格式
  • 如何在Windows上高效处理iPhone HEIF图片:HEIF Utility完整指南
  • 从手动压枪到智能补偿:罗技鼠标宏如何革新《绝地求生》射击体验
  • 成都H型钢行情:马钢 / 莱钢 / 敬业 / 津西 / 日照代理现货足,价格震荡偏强 - 四川盛世钢联营销中心
  • Windows和Office智能激活:KMS_VL_ALL_AIO轻松搞定系统激活难题
  • 2026 报考指南:成都理工大学王牌专业 + 好就业专业全解 - 品牌2026
  • 2026年报考必看:文山学院怎么样?多少分稳上? - 品牌2025
  • 为什么现在转行网络安全的运维工程师越来越多?来看看运维有多委屈,你就懂了........
  • 2026无锡新能源抓钢机选购全攻略:降本更高效的的电动化方案怎么选择利益最大化? - 优质企业观察收录
  • 告别安装失败:手把手教你解决CentOS 7 UEFI安装时‘inst.stage2’找不到设备的经典问题
  • AHB总线复位信号状态解析与设计实践
  • ELPV数据集深度解析:2624张电致发光图像驱动光伏缺陷检测技术革新
  • 2026无锡新能源抓钢机选型全攻略:电动化降本、定制化作业,这5类服务商怎么选? - 优质企业观察收录
  • 风控预警|宾州 Keith 律所新增 26-cv-1047 版权案,MICHAL 商业摄影素材侵权将触发 TRO 冻结!
  • DIY沙画绘图机:用CoreXY数控与Arduino打造桌面艺术装置
  • 新手必看:手把手教你搞定PLS UDE的License加载与常见报错排查(附永久/临时版教程)
  • ChatGPT-5技术前瞻:从推理链稳固到产业级应用重塑
  • 如何用智能下载神器一键获取全网视频资源
  • 从POC到千万QPS:头部AI公司Gemini部署文档编写SOP(含12类角色审批链+版本冻结机制)
  • TV Bro电视浏览器:5个理由让你爱上智能电视上网新体验
  • 2026苹果手机视频提取文字怎么弄?工具与方法保姆级教程 - AI测评专家
  • 跨境明星商标维权复盘:佛州 26-cv-23524 Ozzy Osbourne 案件,SMG 律所 TRO 冻结和解全记录!
  • 别只盯着安装!用VOSviewer分析知网文献,这3个高级玩法让你的综述更出彩
  • 注塑车间降温设备厂家哪家好|2026行业优选指南​ - 合昌环境科技
  • Python文本用户界面curses
  • Keil C51与Archimedes编译器兼容性解析与迁移方案
  • 护网行动内幕:为什么有人能连续5年打国家级项目?他们的训练方法终于公开了!
  • BlenderKit:重新定义你的3D创作工作流程
  • ESP8266-01s烧录MQTT固件避坑指南:从选固件到接线,一次搞定阿里云连接
  • 杉德斯玛特服务卡闲置了,三种方法,新手也能一键回收 - 淘淘收小程序