The 15th Chinese Northeast Collegiate Programming Contest K.City
目录
题目:
思路:
代码:
题目:
原题:
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相关推荐
- The 15th Chinese Northeast Collegiate Programming Contest - K.City
虽然不难,但是感觉很有意思的一道题,下面有几个点感觉还是挺妙的: · 并查集只能加边不能减边: ·对数据进行离线处理,方便我们进行排序处理(后面会解释): 首先数据的范围很大,如果我们每做一次判断都要 ...
- The 15th Chinese Northeast Collegiate Programming Contest部分题解
The 15th Chinese Northeast Collegiate Programming Contest 目录 E. Easy Math Problem 题目思路 题目代码 I. Takea ...
- 【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 ...
- The 15th Chinese Northeast Collegiate Programming Contest 题解(CCPC压力测试?
CCPC压力测试用了这套题,和一个队友一起搞了.初期签到还算比较顺利,还碰到了挺多有意思的题目,做的好爽,但还是犯了很多低级错误,对于杭电要时时刻刻关同步或者scanf,并且写代码还是要仔细些. A. ...
- 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表示 ...
- The 15th Chinese Northeast Collegiate Programming Contest D题
题目链接 大致题意: 给你一段含n个数字的序列,对于这段序列可以有m次操作. 操作有两种类型: 1.(1,L,R)表示将(L,R)区间的每个数加自身的lowbit值(若一个数为x,则其lowbit值为 ...
- 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};$$ $ ...
- 【The 13th Chinese Northeast Collegiate Programming Contest】I. Temperature Survey
题目描述 [题目链接](https://codeforces.com/gym/102220/problem/I) 给定长度为 $n$ 的 $a$ 序列,保证 $a_n \le n$,求有多少个长度为 ...
- The 14th Chinese Northeast Collegiate Programming Contest 补题
题目链接 https://codeforces.com/gym/102801 参考题解 B - Team 简要题意: 给定 nnn 和 MMM,有三个组 ABCABCABC,每组 nnn 个人,每人都 ...
最新文章
- oracle学习-存储过程返回一个值,和返回一个结果集
- 虚拟机nat固定IP上网配置
- Activiti工作流引擎使用详解(一)
- MOSS 2007基础:内容类型(Content Type)之二
- python打包出现乱码_python解压zip包中文乱码解决方法
- react+socket搭建五子棋平台
- linux kernel下输入输出console如何实现
- 源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
- 论文笔记_S2D.45_ORBSLAM-Atlas: 一个稳健和精确的多建图系统
- 深入理解SYN***.+防范思想及ROS设置
- SQL:2016标准概念之数据类型
- 自学网c语言教学视频教程下载,C语言从入门到精通教程 高清不加密 黄老师 视频教程 教学视频 百度网盘下载...
- 十四步实现拥有强大AI的五子棋游戏
- vim 自动格式化代码快捷键
- ROS语音交互系统_(2)利用讯飞TTS实现ROS下语音合成播报
- JavaSSM接入支付宝当面付(扫码支付)
- 2021-09-02 linux修改open files数
- 前端面试复盘:vue技术面没有难倒我,hr面却是一把挂
- 开源 Python IDE PyScripter设置中文界面
- 泰坦之路手机版怎么登陆服务器未响应,泰坦之旅一直登入不进去怎么办