目录

题目:

思路:​​​​​​​

代码:


题目:


原题:

Lucida occupies n cities connected by m undirected roads, and each road has a strength ki. The enemy will attack to destroy these roads. When the enemy launches an attack with damage x, all roads with strength less than x will be destroyed.

Now Lucida has Q questions to ask you, how many pairs of cities are reachable to each other if the enemy launches an attack with damage pi. City x and city y are reachable, which means that there is a path from x to y, and every road's strength in that path is greater than or equal to pi.

简述:

给定两两城市之间的道路长度和一系列伤害值。强度大于等于伤害值的道路不会被破坏。问对于每一个伤害值,有多少对可以互相到达的城市。

思路:


存储:用结构体存道路的起始和权值,以及询问的伤害和序号。重载分别按权值和伤害降序排序。

算法:并查集,维护集合大小。

操作:

将道路按权值降序排序(为了先连接可连接的城市),询问按伤害降序排序(伤害小的集合大小可以在伤害大的集合基础上累加)。对于每一个伤害值,累加新连通的两个集合的城市数,将可合并且未合并的集合合并,并更新集合大小。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;typedef long long ll;
const int N = 2e5 + 5;
int p[N];      //记祖先和集合的大小
ll size[N], ans[N];struct node {int x, y, k;bool operator < (const node &rd)const {  //按路的权值降序(先搭能搭的)return k > rd.k;}
} road[N];struct query {int id, p;bool operator < (const query &qy)const {  //按伤害的值降序(先搭条件严苛的)return p > qy.p;}
} q[N];int find(int x) {                              //并查集return x == p[x] ? x : find(p[x]);
}int main() {int T;cin >> T;while (T --) {int n, m, Q;cin >> n >> m >> Q;memset(ans, 0, sizeof ans);for (int i = 1; i <= n ; ++ i) {  //初始化p[i] = i;size[i] = 1;}for (int i = 0; i < m; ++ i) {int x, y, k;cin >> x >> y >> k;road[i] = {x, y, k};}for (int i = 0; i < Q; ++ i) {cin >> q[i].p;q[i].id = i;}sort(road, road + m);          //排序sort(q, q + Q);ll sum = 0;int j = 0;for (int i = 0;  i < Q; ++ i) {int damage = q[i].p;while (j < m && road[j].k >= damage) {  //能搭int u = find(road[j].x);int v = find(road[j].y);if (u != v) { //未搭sum += (ll)size[u] * size[v];  //为两个集合的城市搭桥p[u] = v;                      //合并顶点size[v] += size[u];            //合并大小}++ j;}ans[q[i].id] = sum;}for (int i = 0; i < Q; ++ i) cout << ans[i] << endl;}return 0;
}

The 15th Chinese Northeast Collegiate Programming Contest K.City相关推荐

  1. The 15th Chinese Northeast Collegiate Programming Contest - K.City

    虽然不难,但是感觉很有意思的一道题,下面有几个点感觉还是挺妙的: · 并查集只能加边不能减边: ·对数据进行离线处理,方便我们进行排序处理(后面会解释): 首先数据的范围很大,如果我们每做一次判断都要 ...

  2. The 15th Chinese Northeast Collegiate Programming Contest部分题解

    The 15th Chinese Northeast Collegiate Programming Contest 目录 E. Easy Math Problem 题目思路 题目代码 I. Takea ...

  3. 【21.10.24】The 15th Chinese Northeast Collegiate Programming Contest题解

    A. Matrix(组合数+数学) #include <bits/stdc++.h> using namespace std; #define mod 998244353 ll fac[1 ...

  4. The 15th Chinese Northeast Collegiate Programming Contest 题解(CCPC压力测试?

    CCPC压力测试用了这套题,和一个队友一起搞了.初期签到还算比较顺利,还碰到了挺多有意思的题目,做的好爽,但还是犯了很多低级错误,对于杭电要时时刻刻关同步或者scanf,并且写代码还是要仔细些. A. ...

  5. The 15th Chinese Northeast Collegiate Programming Contest

    linkkkkkk 1001 Matrix 题意: 用 [ 1 , n 2 ] [1,n^2] [1,n2]的数填 n ∗ n n*n n∗n的矩阵,每个数字只能用一次,记 a i a_i ai​表示 ...

  6. The 15th Chinese Northeast Collegiate Programming Contest D题

    题目链接 大致题意: 给你一段含n个数字的序列,对于这段序列可以有m次操作. 操作有两种类型: 1.(1,L,R)表示将(L,R)区间的每个数加自身的lowbit值(若一个数为x,则其lowbit值为 ...

  7. The 15th Chinese Northeast Collegiate Programming Contest. A Matrix

    题意: $$用[1,2,...,n^2]填n\times n的矩阵,每个数字只能用一次,记:a_i为第i行的最小值:$$ $$S=a_1,a_2,...,a_n\cap{1,2,...,n};$$ $ ...

  8. 【The 13th Chinese Northeast Collegiate Programming Contest】I. Temperature Survey

    题目描述 [题目链接](https://codeforces.com/gym/102220/problem/I) 给定长度为 $n$ 的 $a$ 序列,保证 $a_n \le n$,求有多少个长度为 ...

  9. The 14th Chinese Northeast Collegiate Programming Contest 补题

    题目链接 https://codeforces.com/gym/102801 参考题解 B - Team 简要题意: 给定 nnn 和 MMM,有三个组 ABCABCABC,每组 nnn 个人,每人都 ...

最新文章

  1. oracle学习-存储过程返回一个值,和返回一个结果集
  2. 虚拟机nat固定IP上网配置
  3. Activiti工作流引擎使用详解(一)
  4. MOSS 2007基础:内容类型(Content Type)之二
  5. python打包出现乱码_python解压zip包中文乱码解决方法
  6. react+socket搭建五子棋平台
  7. linux kernel下输入输出console如何实现
  8. 源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
  9. 论文笔记_S2D.45_ORBSLAM-Atlas: 一个稳健和精确的多建图系统
  10. 深入理解SYN***.+防范思想及ROS设置
  11. SQL:2016标准概念之数据类型
  12. 自学网c语言教学视频教程下载,C语言从入门到精通教程 高清不加密 黄老师 视频教程 教学视频 百度网盘下载...
  13. 十四步实现拥有强大AI的五子棋游戏
  14. vim 自动格式化代码快捷键
  15. ROS语音交互系统_(2)利用讯飞TTS实现ROS下语音合成播报
  16. JavaSSM接入支付宝当面付(扫码支付)
  17. 2021-09-02 linux修改open files数
  18. 前端面试复盘:vue技术面没有难倒我,hr面却是一把挂
  19. 开源 Python IDE PyScripter设置中文界面
  20. 泰坦之路手机版怎么登陆服务器未响应,泰坦之旅一直登入不进去怎么办

热门文章

  1. 小程序客服消息怎么使用?小程序的消息推送有什么限制?
  2. 【实战教程】小程序客服消息自动回复
  3. 购买苹果电脑必坑必看-MacBook Pro (15 英寸
  4. IDEA的常见的设置和优化(功能)
  5. 关于JVM(基本常识)
  6. 【软件架构】七款代码味道识别工具
  7. 浏览器标签页用进程还是线程来实现?
  8. 华为HMS Core 6.0全球上线
  9. aruco_ros安装easy_handeye安装
  10. AVAssetExportSession 视频转码