【长郡NOIP2014模拟10.22】道路维护

2024-05-29 03:08

本文主要是介绍【长郡NOIP2014模拟10.22】道路维护,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行
C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护
将C国抽象成一个无向图,定义两个城市乊间的某条路径的破损程度为该条路径上所有边破损程度的最大值,定义两个城市乊间的破损程度为两个城市乊间所有路径破损程度的最小值
然后C国政府向你提问多次,有多少个城市对的破损程度丌超过L,他们将依照你的回答来决定到底怎样维护C国的道路

Input

第一行三个数n,m,q,表示图的点数和边数以及政府的询问数
以下m行每行三个数a,b,c,表示一条连接a,b且破损程度为c的无向边
接下来一行q个数Li,表示询问有多少个城市对的破损程度丌超过Li

Output

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

Sample Input

4 8 8
1 4 0
3 4 9
4 4 9
1 2 10
3 1 8
1 2 6
4 2 7
1 2 5
4 10 8 1 6 7 7 9

Sample Output

1 6 6 1 3 3 3 6
【友情提示】
一个城市对(i,j),满足 i<j ,也就是说(i,j),(j,i)只算一次,且两个城市不同

Data Constraint

30%数据满足n≤10^2,m≤10^3,q≤10^2
60%数据满足n≤10^2,m≤10^3,q≤10^5
100%数据满足n≤10^4,m,q≤10^5,0≤c,Li≤10^9

Solution

显然首先得先把图做一遍最小生成树,这样能保证题目中的两点间权值为路径最小值

接着求满足路径最大值大于k的点对有多少个

先将询问排序
从小到大做,每次询问到某条边时,小于这条边权值的边两边的点都已经被合并到一个即合里了,那么这条边两边的点数之积就是这条边的贡献也就是这条边的答案

Code

#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 101000
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,m,q,bz[N],ans[N],fa[N],b[N],size[N];
struct node{int x,y,z;
}a[N],c[N];
bool cnt(node x,node y){return x.z<y.z;}
int gf(int x)
{return fa[x]==0?x:fa[x]=gf(fa[x]);
}
int main()
{scanf("%d%d%d",&n,&m,&q);fo(i,1,m) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);sort(a+1,a+m+1,cnt);fo(i,1,m){int x=gf(a[i].x),y=gf(a[i].y);if(x!=y) fa[x]=y,bz[i]=1;}memset(fa,0,sizeof(fa));fo(i,1,q) scanf("%d",&c[i].z),c[i].x=i;sort(c+1,c+q+1,cnt);int j=1,as=0;a[m+1].z=2147483647;fo(i,1,n) size[i]=1;fo(i,1,q){for(;a[j].z<=c[i].z;j++)if(bz[j]){int x=gf(a[j].x),y=gf(a[j].y);if(x!=y){as+=size[x]*size[y];fa[x]=y;size[y]+=size[x];}   }ans[c[i].x]=as;}fo(i,1,q) printf("%d ",ans[i]);
}

这篇关于【长郡NOIP2014模拟10.22】道路维护的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012470

相关文章

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Serv

价格减免(Lc2288)——模拟

句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个 价格 。 例如 "$100"、"$23" 和 "$6" 表示价格,而 "100"、"$" 和 "$1e5 不是。 给你一个字符串 sentence 表示一个句子和一个整数 discount 。对于每个表示价格的单

模拟木马程序自动运行:Linux下的隐蔽攻击技术

模拟木马程序自动运行:Linux下的隐蔽攻击技术 在网络安全领域,木马程序是一种常见的恶意软件,它能够悄无声息地在受害者的系统中建立后门,为攻击者提供远程访问权限。本文将探讨攻击者如何在Linux系统中模拟木马程序的自动运行,以及他们可能使用的技术手段。 木马自动运行的常见方法 攻击者通常会使用以下几种方法来确保木马在Linux系统中自动运行: 计划任务(Crontab): 攻击者可以通

2023-2024 学年第二学期小学数学六年级期末质量检测模拟(制作:王胤皓)(90分钟)

word效果预览: 一、我会填 1. 1.\hspace{0.5em} 1. 一个多位数,亿位上是次小的素数,千位上是最小的质数的立方,十万位是 10 10 10 和 15 15 15 的最大公约数,万位是最小的合数,十位上的数既不是质数也不是合数,这个数是 ( \hspace{4em} ),约等于 ( \hspace{1em} ) 万 2. 2.\hspace{0.5em} 2.

java实训 | 低配版模拟火车订票系统

代码:  import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.util.ArrayList;import java.util.List;public class TrainBookingSystem {private JFrame frame;private JPanel

phpmailer 邮件模拟注册验正

下载phpmailer类 我本次的实验用的是版本 5.2.9 下载后解压提取文件class.smtp.php class.phpmailer.php PHPMailerAutoload.php 放在phpmailer目录里 1.链接数据库 conn.php   $conn=mysql_connect("localhost","root","");    if(!$conn){

C++11 标准库头文件模拟实现

系列文章目录 文章目录 系列文章目录前言● 智能指针模板● Vector1. 简单版本2. X 总结 前言 暂不考虑支持多线程 常用STL的简单实现,主要内容百行左右完成,意在理解STL的原理 ● 智能指针模板 SharedPtr #include <assert.h>#include <atomic>template <class T>class S

[系统运维|Xshell]宿主机无法连接上NAT网络下的虚拟机进行维护?主机ping不通NAT网络下的虚拟机,虚拟机ping的通主机!解决办法

遇到的问题:主机ping不通NAT网络下的虚拟机,虚拟机ping的通主机 服务器:Linux(虚拟机) 主机PC:Windows 虚拟机:vb,vm测试过没问题,vnc没测试不清楚 虚拟机网络:NAT下10开头网段,跟192.168网段不同,xshell无法ping通内部通路 项目场景: 项目场景:系统运维工程师、学生模拟生产环境遇到机ping不通NAT网络下的虚拟机,虚拟机ping的通

模拟算法讲解

模拟算法是一种基于实际情况模拟的算法,通过模拟现实世界中的系统或过程,来研究它们的性质和行为。模拟算法可以用于解决各种问题,包括物理模拟、经济模拟、社会模拟等。 模拟算法的基本步骤包括: 定义问题:明确需要模拟的系统或过程,并确定模拟的目标和约束条件。建立模型:根据问题定义,设计合适的模型来描述系统或过程的组成和行为。收集数据:收集和整理与模型相关的数据,包括初始状态和影响模拟结果的参数。

biostar handbook|如何模拟NGS测序结果

如何用软件模拟NGS数据 为了评价一个工具的性能,通常我们都需要先模拟一批数据。这样相当于有了参考答案,才能检查工具的实际表现情况。因此对于我们而言,面对一个新的功能,可以先用模拟的数据测试下不同工具的优缺点。有如下几个工具值得推荐一下: 'wgsim/dwgsim': 从全基因组中获取测序reads'msbar': EMBOSS其中一个工具,能够从单个序列中模拟随机突变'biosed': E