数据范围252501 劲啊

Q国的监察院是一个神秘的组织。
这个组织掌握了整个Q国的地下力量,监察着Q国的每一个人。
监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只听从其上直接司的命令。其中1号成员是监察院的院长,这个庞然大物的主人。
由于时代的进步,监察院议会决定升级组织的旧式通信器,安装最新的反侦测通信器。
他们拿出了M组线路方案,其中第i组线路方案可以用一个四元组(x[i]、y[i]、k[i]、w[i])描述,表示第x[i]号成员可以安装与y[i]号成员的直接通信线路,费用为w[i];x[i]号成员的上司可以安装与y[i]号成员的上司的直接通信线路,费用为w[i];x[i]号成员的上司的上司可以安装与y[i]号成员的上司的上司的直接通信线路,费用为w[i]; …… ;x[i]号成员的k[i] - 1级上司可以安装与y[i]号成员的k[i] - 1级上司的直接通信线路,费用为w[i]。(这k[i]条线路的费用独立计算)
如果一个集合内部的成员两两之间都可以通过直接或间接的通信线路进行通信,那么这个集合的所有成员可以成立一个特别行动组。
监察院想成立一个成员最多的特别行动组,同时他们想让安装线路的费用之和最小,
所以他们找到了Q国的天命者——你,请你帮助他们规划出最优的线路。

$n,m \leq 252501$

sol:我们先考虑链上的做法,发现是区间向区间连边然后求 MST,就是一个裸的线段树优化建图 + Kruskal

怎么搞到树上呢?好像不可搞,那就。。。好好听话用 ST 表优化建图吧

我们可以把一个区间拆成 log 层,用 ST 表维护一下,每层看做一个点然后用并查集搞

这样为什么是 log 的呢?我们可以考虑合并的写法

我们设连边的两个区间为$S_1$,$S_2$,我们现在有两个长度为$2^k$的区间$K_1$,$K_2$($K_1$属于$S_1$,$K_2$属于$S_2$)如果$K_1$,$K_2$没连在一起,就连,并递归连它的 log 个子区间,连上了就 return

对于树,我们可以维护一个树上倍增的结构,用 $S_{(i,j)}$ 表示 $i$ 号点和它往上 $2^j$ 层的点组成的集合

合并跟链上一样,最后我们只关心 $j = 0$ 时的连通信息

这样就是一个优秀的一个 log 的做法了

emmmmmmmmmmm

“题是好题,但是要卡常”

wzj52501怎么跑的那么快呀QQQAQ

不管了不管了,常以后再卡吧

#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline int read()
{
int x = ,f = ;char ch = getchar();
for(;!isdigit(ch);ch = getchar())if(ch == '-')f = -f;
for(;isdigit(ch);ch = getchar())x = * x + ch - '';
return x * f;
}
const int maxn = ;
int n,m;
int fa[maxn][],pos[maxn][];
struct data
{
int x,y,k,w;
bool operator < (const data &b)const{return w < b.w;}
}qs[maxn];
int ufs[],size[maxn],dfn;
LL val[maxn];
inline int find(int x){return x == ufs[x] ? x : ufs[x] = find(ufs[x]);}
void merge(int a,int b,int k,int v)
{
int fu = find(pos[a][k]),fv = find(pos[b][k]);
if(fu == fv)return;
ufs[fv] = fu;
if(!k){size[fu] += size[fv];val[fu] += val[fv] + v;return;}
merge(a, b,k - ,v);
merge(fa[a][k-],fa[b][k-],k - ,v);
}
int main()
{
n = read(),m = read();
for(int i=;i<=n;i++)
{
fa[i][] = read();
for(int j=;j<=;j++)fa[i][j] = fa[fa[i][j - ]][j - ];
}
for(int i=;i<=m;i++)
qs[i].x = read(),qs[i].y = read(),qs[i].k = read(),qs[i].w = read();
sort(qs + ,qs + m + );
for(int i=;i<=n;i++)pos[i][] = ++dfn,size[dfn] = ;
for(int i=;i<=n;i++)
for(int j=;j<=;j++)pos[i][j] = ++dfn;
for(int i=;i<=dfn;i++)ufs[i] = i;
for(int i=;i<=m;i++)
{
int u = qs[i].x,v = qs[i].y;
for(int j=;~j;j--)
if(qs[i].k >> j & )
{
merge(u,v,j,qs[i].w);
u = fa[u][j],v = fa[v][j];
}
}
int ans1 = ;LL ans2 = (1LL << );
for(int i=;i<=n;i++)
{
int fu = find(i);
if(ans1 < size[fu])ans1 = size[fu],ans2 = val[fu];
else if(ans1 == size[fu] && ans2 > val[fu]) ans2 = val[fu];
}
printf("%d %lld",ans1,ans2);
}

哪位大手子教教我怎么卡常呀QQQAQ

Wannafly #4 F 线路规划的更多相关文章

  1. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

  2. iOS调用第三方导航和线路规划

    线路规划: https://blog.csdn.net/qq_19979539/article/details/51938995 百度地图:baidumap: 高德地图:iosamap: 腾讯地图:q ...

  3. [nowcoder_Wannafly挑战赛4_F]线路规划

    [nowcoder_Wannafly挑战赛4_F]线路规划 试题描述 Q国的监察院是一个神秘的组织. 这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人. 监察院一共有 \(N\) 个成员,每一个 ...

  4. 百度地图开发之poi检索,线路规划

      官方文档 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key 先去官方文档申请秘钥下载压缩文件等操作,参考 百度地图的秘钥申请 ...

  5. iOS - 高德地图步行线路规划多点多条线路

    项目集成高德地图遇到的问题: 高德地图的官方步行导航只针对单个起始点单条线路,驾车导航才有途径点多线路.现在项目是要步行导航多个点多条线路

  6. 利用dijkstra算法规划线路

    # dijkstra# 1.在数据库内预先存放了北京市内最新的道路节点,选用优化了得dijkstra算法进行线路规划.    当输入起点和终点后,会计算出最短的路径.同时还能选择查看路径经过的道路节点 ...

  7. java学习规划

    今天在网上看到一位大学生的java学习线路规划,觉得蛮适合我,就详细阅读了一下,规划路线应该适用于大部分学习java语言的人,贴出来与大家共勉. 在学习的过程中,不能急于去学习更多的知识,因为知识是无 ...

  8. Android百度地图开发05之公交信息检索 + 路线规划

    在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容. 公交信息检索 实际上,公交信息检索与POI检索.在线建议检索非常相似,也是把你需要检索的信息发送给百度地图 ...

  9. iOS百度地图路径规划和POI检索详细总结-b

    路径规划.png 百度地图的使用 百度地图API的导入网上说了许多坑,不过我遇到的比较少,这里就放两个比较常见的吧.坑一: 奥联WIFI_xcodeproj.png 如上图所示,在infoplist里 ...

随机推荐

  1. HDU-4031-Attack(树状数组)

    Problem Description Today is the 10th Annual of "September 11 attacks", the Al Qaeda is ab ...

  2. 关于使用Tomcat服务器出现413错误的解决办法(Request Entity Too Large)

    解决的办法: 修改tomcat的配置文件C:/MinyooCMS/tomcat/conf/server.xml(或者安装在D盘文件路径是D: /MinyooCMS/tomcat/conf/server ...

  3. task15-18

    [说明]貌似maven在真实的项目实战中挺重要的,可以省去大量的工作,有必要单独学习一下 15.创建一个新的maven项目 16.在src/main/java下随便创建一个java文件,clean,i ...

  4. 串 2016Vijos省选集训 day3[AC自动机]

    1.串(string.c/.cpp/.pas) 限时1s,内存限制256MB,20个测试点 [题目描述] 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合S,然后它们定义一个字符串为“好”的,当 ...

  5. EasyNVR、EasyDSS二次开发之:RTMP、HLS流在web页面进行无插件播放示例Demo代码

    不管是基于EasyNVR还是EasyDSS,都是支持无插件直播,这也是未来视频直播的一个趋势.对于传统的浏览器插件播放谁用谁知道: 以上是软件自带播放展示 背景需求 对于EasyNVR和EasyDSS ...

  6. 1.BeanFactory解析

    package org.springframework.beans.factory; import org.springframework.beans.BeansException; import o ...

  7. 基于flask的web微信

    web微信 1.扫码获取头像 当你打开web微信的时候,因为http是无状态的,web微信如何实时的获取用户的扫码动作? 那么这里用到的是长轮询的方式. from flask import Flask ...

  8. Linux系统监控的几个命令

    uptime 系统时间.运行时间.连接数(没一个终端算一个连接).在1,5,15分钟内系统负载 uname -a    查看系统所有相关信息 -r     查看系统内核版本 -s    查看系统内核名 ...

  9. MVC ViewBag不能使用在工程文件中添加引用

    在工程文件中 <ItemGroup> // ... </ItemGroup> 添加引用 <Reference Include="Microsoft.CSharp ...

  10. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...