bzoj 1080 [SCOI2008]劣质编码 最短路

STK新手必看:用700km轨道卫星,5步搞定对地覆盖分析报告 本文为STK新手提供700km轨道卫星对地覆盖分析的5步实操指南,涵盖卫星创建、传感器配置、区域定义、计算设置及报告生成全流程,特别标注常见操作误区与优化技巧,帮助用户快速掌握STK覆盖性分析核心方法。 阅读详情

这题可以用一种迷之暴力水过,不过并不知道复杂度,听说跑的挺快的。。。
算了,说正解。。。
当要求有两种解码方式时可以这样做:
把两个串中长的那个当成模板串,短的那个当成匹配串。
设f[i][j] 表示模板串当前为i,匹配串匹配到j,模板串的最短长度。
然后枚举匹配串下一个接哪个串,如果接完后比模板串长那么互换两个串。
这两个串必须从开始时就接不同的串。

然后三个串的情况。一个模板串,两个匹配串。
不过这时蛋疼的是可能有两个串接相同的串(不可能三个串接相同的串)。
这时可能是模板串和一个匹配串相等或两个匹配串相等。
然后就有三种情况。
剩下的和两个的情况基本相同。

#include <bits/stdc++.h>
using namespace std;
#define N 61
int n,ans,inf;
char s[N][N];
int same[N][N][N],len[N],f[N][N][N][3];
int inq[N][N][N][3];
struct node
{
    int x,l1,l2,tp;
    node(){}
    node(int x,int l1,int l2,int tp):x(x),l1(l1),l2(l2),tp(tp){}
    int& F(){return f[x][l1][l2][tp];}
    int& In(){return inq[x][l1][l2][tp];}
};
queue<node>q;
void ins(node x)
{
    f[x.x][x.l1][x.l2][x.tp]=0;
    q.push(x);
}
void upd(node x,int v,node y)
{
    if(y.F()>x.F()+v)
    {
        y.F()=x.F()+v;
        if(!y.In())
            q.push(y),y.In()=1;
    }
}
int main()
{
    freopen("tt.in","r",stdin);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",s[i]+1);
        len[i]=strlen(s[i]+1);
        if(!len[i])return puts("0"),0;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=0;k<=len[i];k++)
            {
                for(int t=1;t<=len[j]&&t+k<=len[i];t++)
                {
                    if(s[i][t+k]!=s[j][t])break;
                    same[i][j][k]++;
                }
                same[i][j][k]=(same[i][j][k]>=min(len[j],len[i]-k));
            }
    memset(f,0x3f,sizeof(f));inf=f[0][0][0][0];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(len[j]<=len[i]&&same[i][j][0])
                for(int k=1;k<=n;k++)
                    if(len[k]<=len[j]&&same[i][k][0]&&k!=i)
                    {
                        if(i==j&&j==k)continue;
                        if(i==j)ins(node(i,len[j],len[k],2));
                        else if(j==k)ins(node(i,len[j],len[k],1));
                        else ins(node(i,len[j],len[k],0));
                    }
    while(!q.empty())
    {
        node t=q.front();q.pop();
        inq[t.x][t.l1][t.l2][t.tp]=0;
        if(t.tp==0)
        {
            for(int i=1;i<=n;i++)
                if(same[t.x][i][t.l2])
                {
                    if(t.l2+len[i]<=len[t.x])
                    {
                        if(t.l2+len[i]<=t.l1)
                            upd(t,0,node(t.x,t.l1,t.l2+len[i],t.tp));
                        else upd(t,0,node(t.x,t.l2+len[i],t.l1,t.tp));
                    }
                    else upd(t,t.l2,node(i,len[t.x]-t.l2,t.l1-t.l2,t.tp));
                }
        }
        else if(t.tp==1)
        {
            for(int i=1;i<=n;i++)
                if(same[t.x][i][t.l1])
                {
                    if(t.l1+len[i]<=len[t.x])
                        upd(t,0,node(t.x,t.l1+len[i],t.l2+len[i],t.tp));
                    else upd(t,t.l1,node(i,len[i],len[t.x]-t.l1,2));
                }
            for(int i=1;i<=n;i++)
                if(same[t.x][i][t.l1])
                    for(int j=1;j<=n;j++)
                        if(j!=i&&len[j]<=len[i]&&same[t.x][j][t.l2]&&same[i][j][0])
                        {
                            if(t.l1+len[i]<=len[t.x])
                                upd(t,0,node(t.x,t.l1+len[i],t.l2+len[j],0));
                            else if(t.l2+len[j]>len[t.x])
                                upd(t,t.l1,node(i,len[j],len[t.x]-t.l1,0));
                            else upd(t,t.l1,node(i,len[t.x]-t.l1,len[j],0));
                        }
        }
        else
        {
            for(int i=1;i<=n;i++)
                if(same[t.x][i][t.l2])
                {
                    if(t.l2+len[i]<=len[t.x])
                        upd(t,0,node(t.x,t.l1,t.l2+len[i],t.tp));
                    else upd(t,t.l2,node(i,len[t.x]-t.l2,len[t.x]-t.l2,1));
                }
        }
    }
    ans=inf;
    for(int i=1;i<=n;i++)
        ans=min(ans,f[i][len[i]][len[i]][0]+len[i]);
    if(ans==inf)puts("-1");
    else printf("%d\n",ans);
    return 0;
}
从mseed到SAC格式转换全攻略:mseed2sac工具安装与批量处理技巧 本文详细介绍了如何将mseed格式的地震数据高效转换为SAC格式,涵盖mseed2sac工具的安装、单文件转换技巧、批量处理自动化实现以及元数据高级处理策略。通过具体命令和脚本示例,帮助地震学研究者快速掌握数据预处理的关键技术,提升波形数据分析效率。 阅读详情

相关推荐

Java开发者必看:5分钟搞定PaddleOCR表格识别,导出Excel和HTML超详细教程

本文为Java开发者提供了集成PaddleOCR实现智能表格识别的详细教程,包括环境配置、核心代码实现、结果导出到Excel和HTML的步骤,以及性能优化技巧。通过PaddleOCR技术,开发者可以快速将图片表格转换为结构化数据,大幅提升工作效率。

weixin_30872499的博客 101

bzoj2870. 最长道路tree【点分治】【边分治】

传送门 HHH 城很大,有NNN个路口(从111到NNN编号),路口之间有N−1N-1N−1边,使得任意两个路口都能互相到达,这些道路的长度我们视作一样。每个路口都有很多车辆来往,所以每个路口i都有一个拥挤程度v[i]v[i]v[i],我们认为从路口sss走到路口ttt的痛苦程度为sss到ttt的路径上拥挤程度的最小值,乘上这条路径上的路口个数所得的积。现在请你求出痛苦程度最大的一条路径,你只需输出这个痛苦程度。 简化版描述: 给定一棵NNN个点的树,求树上一条链使得链的长度乘链上所有点中的最小权值所得的积

东君不爱惜 392

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1775

【BZOJ】2870: 最长道路tree-边分治

边分治入门

远行客 431

可信启动方案设计

本博客简要解释了TF-A中的Measured-Boot可信启动设计实现。

AI-安全-功耗 1204

openharmony之启动恢复子系统详解

需求: 添加一个名为my_service的自定义服务步骤1: 创建服务配置],],"env": [步骤2: 添加到主配置],"jobs": ["cmds": [步骤3: 验证配置# ✅ 检查配置格式 jq . /system/etc/init/my_service.cfg # 🔄 重新加载配置 begetctl reload # 📊 验证服务状态 begetctl dump_service my_serviceOpenHarmony init进程的完整生命周期。🔄 三阶段启动模型⚙️ 配置体系。

m0_67505153的博客 602

算法学习:边分治+bzoj2870: 最长道路tree

算法学习:边分治 前言 本来作为一名标准的NOIP退役选手,老早想要再见OI+停更+读文化课一波行云流水的操作了,结果D类居然还有,于是继续苟!然后就有了日常赛前学算法。 例题 bzoj2870: 最长道路tree 权限题来着,题目大意如下: 给定一棵N个点的树,求树上一条链使得链的长度乘链上所有点中的最小权值所得的积最大。 其中链长度定义为链上点的个数。 分析 关于树上路径问题,想必大家都清楚著...

maxtir的博客 701

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

【BZOJ2870】最长道路

权限题 题意 给出一棵树,点有点权,找到树上的一条路径使得路径上点的个数和其中点权最小的点的点权之积最大,输出最大值。 Sol 边分治板子题啦。 边分治后对于分出来的两棵子树 , 按到左右根的最小点权排序后直接用单调指针对每一个点找到另一棵树中的最优点即可。 code: #include&lt;bits/stdc++.h&gt; using namespace std; #define Set(a...

Yu Gi Oh! 324

[VCS]VCS dump fsdb的精细化控制

本文介绍了VCS FSDB波形dump的精细化控制方法。主要内容包括:1)基本dump方式;2)通过$fsdbDumpoff排除特定层次;3)使用$fsdbDumpvars选择性dump指定模块;4)运行时动态控制dump开关;5)通过文件管理排除列表($fsdbDumpoffFile或自定义读取);6)层次控制策略(剪除整棵树或仅当前层)。这些方法可有效控制波形文件大小,提高仿真效率。

元直的博客 1033

PCIe(二) —— 配置空间

好了,这一篇我们把配置空间的结构,分配和访问,都大概总结了一遍,并且还介绍了它们的头部字段和这些字段的意义,包括BAR和消息路由的原理。之后,如果有时间,我们会继续来探索PCIe的数据报文的结构和传输等等。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1767

Cesium 实战 04 - 标绘功能系列之画点(draw point)

Cesium 实战 - 标绘功能之画点(draw point)。

非科班Java出身GISer的博客 1085

BZOJ 2870 最长道路tree 题解

题目传送门 题目大意: 给一棵树,每个点有点权,一条路径的贡献为路径上最小的点权×\times×路径上的点数,找出贡献最大的路径的贡献。 题解 考虑边分治,重构树时,虚点的点权设为所在子树树根的点权,然后考虑将路径上的点数转化为路径上的边数+1,然后将实边边权设为 111,虚边边权设为 000。 求解时,每次将重心边左右两棵子树的点分别存下来,并且存下他们到重心边路径上的边权和以及最小点权,分别记在两个数组 f1,f2f_1,f_2f1​,f2​ 中,将其中的点按照最小点权从大到小排序,然后对于 f1[i]

a_forever_dream的博客 394

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

洛谷P2506 [SCOI2008]劣质编码——题解

题目传送门 题目大意: 给定n个01字符串,试问能由这些字符串以三种方式构成的最短字符串长度为多少。 思考过程&amp;具体做法: 神DP,看题解才会的。 首先我们考虑二维的情况(也就是只要求能有两种构成方式),令dp[i][j]表示模式串为i,匹配串当前匹配到的位置为j的最短长度。我们将这种状态推广到三维,令dp[i][j][k]表示模式串为i,较长的匹配串匹配到j,较短的匹配串匹...

CleverLarry的博客 356

jre9下载 jdk9

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

BZOJ1080 劣质编码

记忆化搜索

Fuxey 1911

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

bzoj1080: [SCOI2008]劣质编码

正解我不太懂,最后使用clj的神暴力水过去了,总而言之我还是太弱了 typedef vector&lt;int&gt; VI; const int N = 40; map&lt;VI, int&gt; Hash; queue&lt;VI&gt; Q; int n; string Dat[N]; inline void Input() { scanf("%d", &amp;n...

Be A normal OIer 225

BZOJ 1080: [SCOI2008]劣质编码

这题我会暴力。。。如果时限 1e9 的话就可以 AC 啦 这题 clj 也会暴力。。。然后他就秒切了。。。 (果然是蒟蒻 vs 大神) 大神的暴力简直不可用语言来描述了。。。 #include &lt;bits/stdc++.h&gt; using namespace std; const int N = 55; string str[N]; int n; vector&lt;int...

yc_lrz的博客 253

【BZOJ2870】—最长道路Tree(边分治)

传送门 边分治比点分治好的一点就是每次分出来都只有2个集合 如果遇到难以合并的信息的时候边分治就很有用了 手动转二叉树 每次可以按照权值大小排序后对两个集合双指针扫两遍 具体实现可以看代码 复杂度O(nlog2n)O(nlog^2n)O(nlog2n) #include<bits/stdc++.h> using namespace std; const int RLEN=1<&...

Stargazer的博客 411

bzoj1080

题解: 好像不用dp 暴力+位运算即可 代码: #include<bits/stdc++.h> using namespace std; typedef vector<int> ve; map<ve,int>hash; queue<ve>Q; string s[35]; int n; int main() { ...

a5199519的博客 144

bzoj1237 [SCOI2008]配对

Description 你有n 个整数Ai和n 个整数Bi。你需要把它们配对,即每个Ai恰好对应一 个Bp[i]。要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配 对。例如A={5,6,8},B={5,7,8},则最优配对方案是5配8, 6配5, 8配7,配对整数 的差的绝对值分别为2, 2, 1,和为5。注意,5配5,6配7,8配8是不允许的,因为相同的数不许配对。 Input

某炒鸡无底蒟蒻的博客 621

bzoj2870

点分治 跟路径有关的立马想到了点分治 自然我们需要统计每条路径的答案,根据点分治的过程,考虑每条路径,我们希望当前路径上的点作为最小值 那么我们用树状数组保存之前每个最小值对应的最长长度,跑两遍即可 #include<bits/stdc++.h> using namespace std; const int N = 5e4 + 5; vector<...

weixin_30610755的博客 138

bzoj2870: 最长道路tree(边分治)

传送门 边分治板题。。。 三度化即可。 代码: #include<bits/stdc++.h> #define ri register int #define fi first #define se second using namespace std; const int rlen=1<<18|1; inline char gc(){ static char bu...

苟为蒟蒻又何妨 341

[BZOJ2870]最长道路tree 边分治

因为点分治会带来子树信息合并的问题,于是考虑通过添加虚点的方法把多叉树转成二叉树,然后采用边分治,每次考虑经过分治重边的情况,把两边的所有点按路径上的最小权值排序,然后相互更新一下即可,复杂度O(nlog2n)O(nlog2⁡n)O(n\log ^2n)。 因为多叉树转二叉树的过程中添加了虚点,所以假如xxx和yyy的lca是虚点,那么路径(x,y)(x,y)(x,y)上原本的那个实点lca的信...

DOFYPXY的博客 958

bzoj2870: 最长道路tree

原题 这是一道权限题 一开始就想到可以从大到小加点,这样路径最小值就确定是VxV_xVx​ 然后我想到是用LCT维护,然后被题解吊锤了 讲一下如何维护,并查集记录这个联通块的直径,和直径的两个端点 对于合并,你惊讶的发现两个联通块最终的直径的端点一定在四个原端点之间,可以直接枚举,取最长的一对 至于距离,你发现距离就是最开始树上的距离,这个想怎么算怎么算 #include &amp;amp;amp;lt;cstdio...

spzb的博客 294

BZOJ 2870: 最长道路tree 边分治

注意一下在双指针的时候那个 mxdep 初始值应该是 -1,因为可能不满足最小值. code: #include <cstdio> #include <string> #include <map> #include <cstring> #include <vector> #include <set> ...

EM LGH 164
上一篇: bzoj 1079 [SCOI2008]着色方案 dp
下一篇: bzoj 1087 [SCOI2005]互不侵犯King 状压dp
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值