传送门

找两点间最长边(一条路径)的最小值(所有路径),这个值的意义在本题中相当于这两点可以在某种意义上连通了,然后给定一个值L问你最多能连通多少种两点。
需要注意的是L不是和的上限,而是单个两点间费用的上限。所以只用想有多少种两点间的费用小于等于L就行了。
而两点间的费用必然等于某条边的权值。
要知道,边的权值按从小到大离散分布,那么L可以退化到某个小于等于它的边的权值上。
所以,每次union返回的是本次union带来全图新增的连通的两点对的个数,是增量。那么本次边的权值所对应的查询结果就是历史连通对个数加上本次增量。
由于边的权值范围太大,用unordered_map替代数组。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <unordered_map>
using namespace std;const int MAXN = 1e4 + 5;
int N, M, Q;
int pre[MAXN];
unordered_map<int, int> mk;            // 这里用map时间差距不大struct Edge
{int n1, n2, cost;bool operator<(const Edge& e) const{return cost < e.cost;}
};
vector<Edge> ve;void init()
{ve.clear();memset(pre, -1, sizeof pre);mk.clear();
}int f(int x)
{int f0 = x, f1 = x;for (; pre[f0] > 0;) f0 = pre[f0];for (; pre[f1] > 0;){int t = f1;f1 = pre[f1];pre[t] = f0;}return f0;
}int u(int n1, int n2)
{int f1 = f(n1);int f2 = f(n2);if (f1 != f2){int t = -(pre[f1] + pre[f2]);int r = (t*(t - 1)) / 2 - ((-pre[f1] * (-pre[f1] - 1)) / 2 + (-pre[f2] * (-pre[f2] - 1)) / 2);if (pre[f1] <= pre[f2]){pre[f1] += pre[f2];pre[f2] = f1;}else{pre[f2] += pre[f1];pre[f1] = f2;}return r;}return 0;
}int main()
{int a, b, c;for (; ~scanf("%d%d%d", &N, &M, &Q);){init();for (int i = 0; i < M; i++){scanf("%d%d%d", &a, &b, &c);ve.push_back({ a,b,c });}sort(ve.begin(), ve.end());int total = 0;for (int i = 0; i < ve.size(); i++){total += u(ve[i].n1, ve[i].n2);mk[ve[i].cost] = total;}for (int i = 0; i < Q; i++){scanf("%d", &a);int ans = 0;for (int j = a; j >= 0; j--){if (mk.find(j) != mk.end()){mk[a] = mk[j];ans = mk[j];break;}}printf("%d\n", ans);}}return 0;
}

转载于:https://www.cnblogs.com/CrossingOver/p/10704889.html

HDU 3938 Portal相关推荐

  1. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  2. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  3. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  4. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  5. 【转】并查集MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...

  6. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

  7. 图论练习题(存起来练)

    =============================以下是最小生成树+并查集======================================  [HDU]  1213 How Man ...

  8. 图论500题 慢慢写

    题目来源 https://blog.csdn.net/ffq5050139/article/details/7832991 这篇博客用来记录自己刷的图论题 先占个坑 所有题目都来自上面的链接 会慢慢更 ...

  9. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

最新文章

  1. MySQL 导致 CPU 消耗过大,如何优化
  2. 高通:全球NB-IoT/eMTC最新现状
  3. 洛谷 [P1198] 最大数
  4. 【SDCC 2016·杭州站】9月22日大数据实战专场精彩呈现
  5. C++中的union(联合体,共用体,数据变量可以共享内存,以节省内存空间)
  6. Microsoft发布用于统一事件处理的Azure事件网格
  7. Mdi和修改的基本逻辑
  8. 非阻塞式JavaScript脚本介绍
  9. 非对称加密(1)非对称加密原理
  10. 滁州2021年高考成绩查询时间,安徽2021中考时间表安排 滁州2021年中考时间考点公布...
  11. oppo锁屏断网设置在哪里呀_oppo锁屏时钟怎么改格式?锁屏时钟位置在哪里设置调整...
  12. Windows下QT配置librdkafka
  13. zynq7000从emmc启动,使用ext4文件系统
  14. 机器学习中的数学(八):卡方分布(Chi-squared Distribution) t分布(T Distribution)F分布(T Distribution)
  15. [20151018]SCZ训练
  16. 网易云短信php接口,网易云音乐简单API
  17. 制作美观GIS地图,掌握这些技巧就够了
  18. API接口——睡眠带开放能力
  19. Docker MSSQL 添加读取 MDF 文件
  20. Pr 电影开场帷幕拉开效果和轨道遮罩的应用

热门文章

  1. 文件共享之Samba
  2. 【BZOJ】1706: [usaco2007 Nov]relays 奶牛接力跑
  3. hdu4932 Miaomiao#39;s Geometry (BestCoder Round #4 枚举)
  4. view技术简单了解
  5. Raid5.h注释翻译
  6. [IE9] 开发IE9上的屏幕取词功能
  7. Golden Gate 与 Oracle DataGuard的区别
  8. Android Activity 提示[No Launcher activity found!]
  9. Android windowSoftInputMode属性解析
  10. translate动画