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. OpenSUSE 11 安装Qt5.0,失败,失败,失败,留个坑,以后来填,万一实现了呢

    我又来无耻的写问题来了,这次还真的是没有解决,线留坑吧,万一以后实现了. 同样,这次也是以恶搞网友说听说想在open suse 上面安装5.0版本以后的Qt,自己折腾好几没有成功. 我一想,哎,这不是 ...

  2. selenium自动化测试资源整理

    1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是原版的就不得而知了. http://www.slimjet.com/ch ...

  3. 监控系统cpu相关统计信息

    背景:需要测试监控各个操作系统平台机器上的cpu相关的各种统计信息 为了方便测试,我写了一个比较通用的shell脚本,目前可以兼容Redhat6+,Redhat7+,其他操作系统没测,可以实时监控机器 ...

  4. Selenium基础之--01(将浏览器最大化,设置浏览器固定宽、高,操控浏览器前进、后退)

    1,将浏览器最大化 我们知道调用启动的浏览器不是全屏的,这样不会影响脚本的执行,但是有时候会影响我们"观看"脚本的执行. coding=utf-8 from selenium im ...

  5. [CodeForce431C]k-tree

    Quite recently a creative student Lesha had a lecture on trees. After the lecture Lesha was inspired ...

  6. Struts2(八.添加用户多张照片实现文件上传功能)

    1.modify.jsp 在modify.jsp修改用户信息页面实现文件上传,添加用户照片的功能 如果是文件上传,method必须是post,必须指定enctype <form method=& ...

  7. leetcode-分割回文子串

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...

  8. VMWare Workstation新装CentOS 7无法联网解决办法

    按照这位博主的方法成功解决:http://blog.csdn.net/deniro_li/article/details/54632949

  9. 动态内存&对象

    一.对象的生存期 对于 static 对象和自动对象,它们都有着严格定义的生存期. 全局对象:在程序启动时分配,在程序结束时销毁. 局部自动对象:在对象定义语句时分配,在离开块时销毁 局部 stati ...

  10. 第三次寒假作业 sketch 了解

    什么是sketch? sketch 是一种基于散列的数据结构,可以在高速网络环境中,实时地存储流量特征信息,只占用较小的空间资源,并且具备在理论上可证明的估计精度与内存的平衡特性. 通过设置散列函数, ...