BZOJ3522&4543: [POI2014]Hotel加强版

BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】* BZOJ4543 POI2014 Hotel加强版 Description 同OJ3522 数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 5 Sample Output 5 我处理DP问题就像是智障一样 感谢yyf大神的讲解啊 首先我们可以发现三个点两两距离相等说明三个点的连线交点是... 阅读详情

题解见http://blog.youkuaiyun.com/neither_nor/article/details/51278993

不知道这是什么狗题,时间复杂度貌似是O(N)

#include<iostream>
#include<cstdio>
#include<cstring>
#define M 3000010
#define N 200010
using namespace std;
long long wa[M];
long long *f[N],*g[N],*p=wa; 
long long to[N],nxt[N],pre[N],cnt;
void ae(long long ff,long long tt)
{
    cnt++;
    to[cnt]=tt;
    nxt[cnt]=pre[ff];
    pre[ff]=cnt;
}
long long d[N],fa[N],mx[N],yz[N];
void build(long long x)
{
    long long i,j;
    yz[x]=x;
    for(i=pre[x];i;i=nxt[i])
    {
        j=to[i];
        if(j==fa[x]) continue;
        fa[j]=x;
        build(j);
        if(d[j]>d[mx[x]])
        {
            yz[x]=yz[j];
            mx[x]=j;
        }
    }
    if(mx[x]==x) d[x]=0;
    else d[x]=d[mx[x]]+1;
    for(i=pre[x];i;i=nxt[i])
    {
        j=to[i];
        if(j==fa[x]||(j==mx[x]&&x!=1)) continue;
        p+=(d[j]+5);
        f[yz[j]]=p;p+=5;
        g[yz[j]]=p;
        p+=2*d[j]+5;
    }
}
long long ans;
void dfs(long long x)
{
    long long i,j,k;
    for(i=pre[x];i;i=nxt[i])
    {
        j=to[i];
        if(j==fa[x]) continue;
        dfs(j);
        if(j==mx[x])
        {
            f[x]=f[j]-1;
            g[x]=g[j]+1;
        }
    }
    ans+=g[x][0];f[x][0]=1;
    for(i=pre[x];i;i=nxt[i])
    {
        j=to[i];
        if(j==fa[x]||j==mx[x]) continue;
        ans+=g[x][1];
        for(k=1;k<=d[j];k++)
        {
            ans+=g[j][k]*f[x][k-1];
            ans+=f[j][k]*g[x][k+1];
        }
        for(k=0;k<=d[j];k++)
        {
            g[x][k-1]+=g[j][k];
            g[x][k+1]+=f[j][k]*f[x][k+1];
            f[x][k+1]+=f[j][k];
        }
    }
}
long long n;
int main()
{
    scanf("%lld",&n);
    long long i,j,x,y;
    for(i=1;i<n;i++)
    {
        scanf("%lld%lld",&x,&y);
        ae(x,y);ae(y,x);
    }
    build(1);
    if(n==1) {puts("0");return 0;}
    dfs(1);
    printf("%lld\n",ans);
}

【BZOJ3522】【POI2014】Hotel 【题目链接】 点击打开链接 【双倍经验链接】 【BZOJ4543】【POI2014】Hotel加强版 【思路要点】   用长链剖分维护DP数组。 时间复杂度\(O(N)\)。   【代码】 #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; const int MAXN = 5e3 + 5; const int ... 阅读详情

相关推荐

STM32+CubeMX实战:5步搞定LWIP HTTP服务器搭建(附常见编译错误解决)

本文详细介绍了基于STM32和CubeMX平台,快速搭建LWIP HTTP服务器的5步实战指南。内容涵盖从项目初始化、LWIP深度配置到解决经典的`HTTPD_FSDATA_FILE`编译错误,并分享了使用VSCode进行高效开发的工作流,旨在帮助嵌入式开发者快速实现网络功能并规避常见陷阱。

weixin_29192365的博客 574

【BZOJ4543】Hotel加强版【神仙树形dp】【长链剖分】

就算城市燃烧起来,没用的我也还是会待在这里。

Lstdo的博客 280

手把手教你用T630芯片开发USB3.0数据采集卡(含FPGA对接避坑指南)

本文详细介绍了如何使用国产T630芯片开发USB3.0数据采集卡,包括FPGA对接的避坑指南。T630作为国产替代方案,相比传统CYUSB3014芯片,具有更高的传输带宽(实测410MB/s)和更完善的开发支持。文章从硬件设计、固件开发到上位机调试,提供了全流程的技术细节和优化技巧,助力开发者快速实现工业级数据采集系统。

weixin_42531163的博客 621

[POI2014]Hotel加强版

Hotel加强版 题解 很板子的一道长链剖分。 首先应该是很容易想出它的dp方程式的。 我们令fu,if_{u,i}fu,i​表示在uuu的子树中,与uuu距离为jjj的点的个数,gu,ig_{u,i}gu,i​表示在uuu的子树中,两个离它们lcalcalca距离与它们的lcalcalca与uuu距离的差值为jjj的点对个数。 显然,当我们将点vvv合并到点uuu上时,有dpdpdp转移式 fu,j+=fv,j−1,gu,j+=fu,jfv,j−1+gv,j+1f_{u,j}+=f_{v,j-1},g_{

StaroForgin的博客 324

华为云物联网系统开发(纯云端)外包方案及项目需求说明书

提供一个详细的需求文档(SRS,Software Requirements Specification),用于指导完全零基础的非专业负责人外包兼职专业技术人员开发一款基于华为云物联网平台、Astro低代码平台和Astro Canvas大屏设计的物联网系统,纯软件实现并支持下载部署。文档涵盖详细的软硬件组成清单(聚焦软件和云服务)、技术文档要求等,确保非专业人员在移交后能够复用、扩展和操作该系统。本文档简洁、全面,适合非技术背景的管理者使用,并基于华为云生态的内部实施部署。

hy行者勇哥的博客 621

【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 1万+

【BZOJ4543】Hotel加强版(长链剖分 + 启发式合并)

题意 给一棵树,从中选三个点,使得三个点两两间距离相等,求方案数。 题解 对每一个结点,用num[u][d]num[u][d]num[u][d]表示子树中到当前结点u的距离为d的节点数,用way[u][d]way[u][d]way[u][d]表示已经有很多两个结点的配对,再添加一个到当前结点距离为d的结点即可构成一个方案的结点对数。 枚举子节点v,先计算答案Ans+=way[u][d+1]×num...

CaptainChen的博客 633

GameFramework 框架详解之 Network网络模块 工具链

GameFramework(下面简称GF)Demo中,已经给我们提供了Network模块使用的protobuf使用的动态链接库protobuf-net.dll,但是GF并没有给我们提供protobuf相关的工具链,比如:1.proto文件自动导出对应c#的Packet类和PacketHandler类2.导出Packet类继承IReference以便使用引用池。3.自动生成Packet类和PacketHandler的Id,且保持和服务器Id一一对应。

TxNet 2903

[POI2014]Hotel加强版【长链剖分】

题目链接 BZOJ 4543 给定一棵树,在树上选3个点,要求两两距离相等,求方案数。 这个真的不好想,真的好难好难哎。 首先,我们不妨看成固定两点求第三点这样的策略,使得计算答案变得略微方便处理一些。 固定一个二维点对(x, y)表示: 使得,x和y满足这样的条件: 我们不妨设也就是,我们知道这样的(x, y)点对,去寻找可能的z点的。z点有一个性质,就是距离u点的距离为j。...

既然弱小,就只顾变强就是了 395

基于深度学习的鸟类检测识别系统:YOLOv5 + YOLOv8 + YOLOv10 + UI界面 + 数据集

YOLOv5是当前目标检测领域非常流行的模型,具有良好的检测精度和实时推理速度。其网络结构相比前几代YOLO模型进行了优化,尤其是在检测精度和计算效率上有了显著提高。YOLOv5特点高效性:能够在较低的硬件环境下进行实时检测。易于部署和使用:YOLOv5提供了简单的API接口,方便开发者快速集成和使用。优异的精度:在多个数据集上测试,表现出色。本文详细介绍了基于YOLOv5、YOLOv8和YOLOv10的鸟类检测识别系统的设计与实现。

YOLO 1115

汇川H5U模拟量输出模拟量转换FC: S_RTI

汇川H5U模拟量输入模拟量转换 FC S_ITR_RXXW_Dor的博客-优快云博客接口中的临时变量,如果优化的可以省去一些,感兴趣的可以自行编写修改下,这里不在举例。至此模拟量输入转换FC编写完成。

RXXW_Dor的博客 6682

【BZOJ4543】【POI2014】Hotel加强版

【题目链接】 点击打开链接 【双倍经验链接】 【BZOJ3522】【POI2014】Hotel 【思路要点】   用长链剖分维护DP数组。 时间复杂度\(O(N)\)。 【代码】   #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; const int MAXN = 1e5 + 5; const int MAX...

cz_xuyixuan的博客 389

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

BZOJ4543/BZOJ3522 [POI2014]Hotel加强版

这题真TM神…… 和commonc一起orz了半天题解-_- 我们考虑一下dp,f[i][j]表示以i为根的子树里与i距离为j的点的个数,g[i][j]表示以i为根的子树里有这么多个点对在底下分叉了,并且还没有第三个点和这个点对匹配,这个第3个点不在i的子树里并且与i距离为j的方案数(不考虑第三个点有多少种选法)、 设x表示当前点,y表示儿子 f[x][0]=1 ans+=g[x][0]

neither_nor 4607

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

BZOJ4543 [POI2014]Hotel加强版

Address BZOJ4543 BZOJ3522 Solution 三个点两两距离相等,相当于选出三条长度相等且只有唯一公共点的路径。 设 f[x][i]f[x][i]f[x][i] 表示点 xxx 的子树内与点 xxx 距离为 iii 的点数,转移显然为:f[x][i]=∑y∈children[x]f[y][i−1]f[x][i] =\sum\limits_{y \in children...

Log_x's Blog 557

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【BZOJ4543】[POI2014]Hotel加强版 长链剖分+DP

【BZOJ4543】[POI2014]Hotel加强版 Description 同OJ3522数据范围:n&lt;=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 5 Sample Output 5 题解:很神的做法。 用f[x][a]表示x子树中有多少个深度为a的点,g[x][a]表示x子树中有多少到lca...

aodanchui1057的博客 144

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

bzoj3522: [Poi2014]Hotel

https://www.lydsy.com/JudgeOnline/problem.php?id=4543 bzoj 4543: [POI2014]Hotel加强版 n个点的无边权的树,树上找三个点,两两距离相同。 先说弱化版,n&lt;=5000 原来我的做法是类似点分治的思路,但是并不能扩展 一个三个点的组其实是一个连通块, 我们考虑在连通块最上面的位置统计 要么x自...

weixin_30426957的博客 169

[BZOJ3522&BZOJ4543][Poi2014]Hotel(树形DP+长链剖分)

Address 洛谷P3565 BZOJ3522 BZOJ4543 LOJ#2431 Solution 一个小转化: 三点两两距离相等,等价于存在一个点,到三个点的距离相等。 然后就能愉快地 DP 辣! 暴力的 O(n2)O(n^2)O(n2) DP : f[u][i]f[u][i]f[u][i] 表示 uuu 的子树内与 uuu 距离为 iii 的点数。 g[u][i]g[u][i]g[u][i...

女装的你,如此好看! 356

BZOJ 3522 & 4543: [POI2014]Hotel

指针优化树形DPBZOJ3522的n只有5000,可以随便用一个n^2的大暴力搞过去,就不讲了。BZOJ4543好丧啊,看到题解我当时就震惊了,题解点我n有十万,使人一看到就会放弃一些树形DP的思路,而正解正是树形DP,难点就在内存和时间的优化。可以证明复杂度是O(n),详见上面的题解呀。#include<cstdio> #include<cstring> #define N 5005 #defin

无尽 599

bzoj3522: [Poi2014]Hotel 长链剖分+树形DP

bzoj3522\4543: [Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达。吉丽要给他的三个妹子各开(一个)房(间)。三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽满意,你需要让三个房间两两距离相同。 有多少种方案能让吉丽满意? Input 第一行一个数n。 接下来n-...

maxtir的博客 354

BZOJ4543/3522: [POI2014]Hotel加强版(洛谷P3565)

长链剖分 树形DP

forezxl的博客 566

@bzoj - 4543@ [POI2014]Hotel加强版

目录 @description@ @solution@ @part - 1@ @part - 2@ @accepted code@ @details@ @description@ 给定一棵树,求无序三元组 (a, b...

weixin_30362233的博客 149

BZOJ 4543: [POI2014]Hotel加强版 长链剖分

4543: [POI2014]Hotel加强版 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 373  Solved: 205 [Submit][Status][Discuss] Description 同OJ3522 数据范围:n Input Output Sample Input 7 1 2

BlackJack 871
上一篇: BZOJ3521: [Poi2014]Salad Bar
下一篇: BZOJ3523: [Poi2014]Bricks
commonc
博客等级 码龄11年 173粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值