U32911 道路维护

题目背景

最近很多人投诉说C国的道路破损程度太大,以至于无法通行。

C国的政府很重视这件事,但是最近财政有点紧,不可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护。

题目描述

将C国抽象成一个无向图,定义两个城市之间的某条路径的破损程度为该条路径上所有边破损程度的最大值,定义两个城市之间的破损程度为两个城市之间所有路径破损程度的最小值。

C国政府向你提问多次,有多少个城市对的破损程度不超过\(L\),他们将依照你的回答来决定到底怎样维护C国的道路

输入格式

第一行三个数\(n,m,q\),表示图的点数和边数以及政府的询问数

以下\(m\)行每行三个数\(a,b,c\),表示一条连接\(a,b\)且破损程度为\(c\)的无向边

接下来一行\(q\)个数\(L_i\),表示询问有多少个城市对的破损程度不超过\(L_i\)

输出格式

一行\(q\)个数,对应每个询问,输出满足要求的城市对的数目。

说明

一个城市对\((i,j)\),满足\(i<j\),也就是说\((i,j)\),\((j,i)\)只算一次,且两个城市不同

数据范围

测试点编号 \(n\) \(m\) \(q\)
1 50 100 100
2 200 400 100
3 300 500 1000
4 1000 10000 10000
5 5000 20000 10000
6 5000 20000 100000
7 10000 50000 100000
8 10000 50000 100000
9 20000 100000 100000
10 20000 100000 100000

所有的\(L_i\)满足\(L_i\le 10^9\)


一眼上去可以最小生成树+点剖

但想一下我们发现其实是可以离线的

把询问和边权放在一起排序,模拟krus建最小生成树过程,全局更新答案


Code:

#include <cstdio>
#include <algorithm>
const int N=20010;
const int M=200010;
struct node
{
int u,v,w,id;
bool friend operator <(node n1,node n2)
{
if(n1.w==n2.w) return n1.id<n2.id;
return n1.w<n2.w;
}
}e[M];
int f[N],siz[N],ans[M>>1],sum,n,m,q;
int Find(int x)
{
return f[x]=f[x]==x?x:Find(f[x]);
}
int cal(int x)
{
return x*(x-1)/2;
}
void Merge(int x,int y)
{
int X=Find(x),Y=Find(y);
sum-=cal(siz[X])+cal(siz[Y]);
siz[X]+=siz[Y];
sum+=cal(siz[X]);
f[Y]=Find(X);
}
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
f[i]=i,siz[i]=1;
for(int i=1;i<=m;i++)
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
for(int i=1;i<=q;i++)
{
scanf("%d",&e[i+m].w);
e[i+m].id=i;
}
std::sort(e+1,e+1+m+q);
for(int i=1;i<=m+q;i++)
{
if(!e[i].id&&Find(e[i].u)!=Find(e[i].v))
Merge(e[i].u,e[i].v);
if(e[i].id)
ans[e[i].id]=sum;
}
for(int i=1;i<=q;i++)
printf("%d ",ans[i]);
return 0;
}

2018.7.26**

洛谷 U32911 道路维护 解题报告的更多相关文章

  1. 洛谷 P2058 海港 解题报告

    P2058 海港 题目描述 小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况: ...

  2. 洛谷 P3956 棋盘 解题报告

    P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...

  3. 洛谷 P1979 华容道 解题报告

    P1979 华容道 题目描述 小\(B\)最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时 ...

  4. BZOJ 3545 / 洛谷 P4197 Peaks 解题报告

    P4197 Peaks 题目描述 在\(\text{Bytemountains}\)有\(N\)座山峰,每座山峰有他的高度\(h_i\).有些山峰之间有双向道路相连,共\(M\)条路径,每条路径有一个 ...

  5. 虔诚的墓主人(BZOJ1227)(洛谷P2154)解题报告

    题目描述 小W是一片新造公墓的管理人.公墓可以看成一块N×M的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地. 当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地. ...

  6. 洛谷 P2672 推销员 解题报告

    P2672 推销员 题目描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距离为 ...

  7. 洛谷 P2679 子串 解题报告

    P2679 子串 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\)中出 ...

  8. 洛谷 P1076 寻宝 解题报告

    P1076 寻宝 题目描述 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下: 藏宝楼共有\( ...

  9. 洛谷 P1582 倒水 解题报告

    P1582 倒水 题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把 ...

随机推荐

  1. WSL跑linux服务程序

    前段时间折腾了一次WSL下的Apache,无奈遇到各种奇葩问题,总是解决不了,最终放弃,甚至得出了一个现在看来比较可笑的结论:WSL是不可能跑Linux服务程序的! 当时的思路想歪了,由于Apache ...

  2. git的一些操作指令

    1. mkdir learn 创建learn文件夹(也可不用命令创建,直接右击新建即可)   cd learn进入learn文件夹   git init  把learn文件夹 变成 可以用git管理的 ...

  3. EditorGUI控件输入监听

    EditorGUI控件输入监听 在做编辑器开放的过程中,有时候要对用户输入进行判断和限制,但EditorGUI控件却没有触发回调,而是提供了一种麻烦的办法--使用EditorGUI.BeginChan ...

  4. javaee开发工具及环境配置过程

    在配置javaee开发环境的过程中遇到过很多问题,在此系统的整理一下我之前的配置过程 注:配置过程学习自<JSP&Servlet学习笔记(第二版)>详细过程可以阅读此书.在文章的最 ...

  5. Juice账号

    zhangxiaocong69 zxc6545398 15657167502 区块链账户: 0x00680404766965143796a0a070835c3cdf9a4a50

  6. Linux内核设计笔记14——块I/O层

    块I/O层 基本概念 系统中可以随机访问固定大小数据片的硬件设备称做块设备,这些固定大小的数据片称之为块.还有一种基本的设备称之为字符设备,其需要按照顺序访问,比如键盘. 扇区:块设备中最小的寻址单元 ...

  7. HADOOP docker(五):hadoop用户代理 Proxy user

    1.hadoop用户代理简介2.配置3.实验 1.hadoop用户代理简介 hadoop用户代理功能的作用是让超级用户superuser模拟一个普通用户来执行任务.比如用户joe通过oozie提交一个 ...

  8. 测试下markdown!

    目录 目的 代码 目的 测试markdown 代码 void static void main(args String[]){ System.out.println("hollw" ...

  9. Thunder团队第一周 - Scrum会议5

    本节内容: 工作照片 会议时间 会议地点 会议内容 Todo list 燃尽图 Scrum会议5 小组名称:Thunder 项目名称:爱阅app Scrum Master:邹双黛 工作照片: 参会成员 ...

  10. ava中普通代码块,构造代码块,静态代码块区别及示例

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...