数据范围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. ios 动画 创建一个UIImageView并将其属性设置animationImages为UIImages 的数组

    NSArray *animationFrames = [NSArray arrayWithObjects: [UIImage imageWithName:@"image1.png" ...

  2. 一篇文章彻底弄清ARC始末

    本文转载至 http://blog.csdn.net/allison162004/article/details/38758265 自动引用计数(ARC)是编译器的一个特色,提供了Objective- ...

  3. 二、Android应用的界面编程(六)ProgressBar及其子类[SeekBar、RatingBar]er

    通常用于向用户显示某个耗时操作完成的百分比.Android支持几种风格的进度条,通过style属性可以为ProgressBar指定风格.该属性支持如下几个属性值. # @android:style/W ...

  4. web.xml配置整理

    虽然是做web开发,但是web中的很多配置有的时候却不是很清楚,只是知道怎么配置,于是就把在网上看到各种关于web.xml的东西整理一下: web.xml中url-pattern的3种写法 1完全匹配 ...

  5. elasticsearch从入门到出门-03-多种搜索

    1.query string search 2.query DSL 3.query filter 4.full-text search 5.phrase search 6.highlight sear ...

  6. 经典的css reset代码 (reset.css)

    <style> html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, ...

  7. ASP获取上月本月下月的第一天和最后一天

    上月第一天:<%=dateadd("m",-1,year(date)&"-"&month(date)&"-1" ...

  8. Opennms -安装

    参考官方网站:https://docs.opennms.org/opennms/releases/latest/guide-install/guide-install.html#gi-install- ...

  9. ABAP table control例子

    [转自]http://blog.csdn.net/lhx20/article/details/3039909Table control用于在screen上以表格的形式显示数据,在table contr ...

  10. HTML5离线存储和本地缓存

    一.离线存储 有一个web应用有三个文件index.html,a.js,b.css,现在需要把js和css文件缓存起来 1.在index.html里加上<html manifest=" ...