YYHS-论战大原题

题目描述

Abwad最终造出了一道惊世骇俗的难题——在线询问动态仙人球上第k长的路径的所有后缀的不同的回文子串数,可是nbc只瞄了一眼题面,就说出了Abwad冥思苦想了三天三夜才得到的算法。

为了扭转劣势,Abwad决定和nbc论战大原题。规则很简单,即给出一道原题,比谁能更快地找出原题的出处并将其AC。现在摆在他们面前的是这样一道原题:

给定一个n个点m条边的无向图。定义一条路径的长度为路径上最小边的权值。定义dist(i,j)为起点为i,终点为j的长度最长的路径的长度。求出第k大的dist(i,j)(i<j)。

Abwad依稀记得这道题曾经出现在一场名叫“恩偶爱皮”的比赛中。在搜索引擎的帮助下,他开始以50Hz的手速写起了代码。作为旁观者的你,一眼就看出Abwad看错题了。为了证明他是错的,请你写个程序,求出答案。

输入

第一行两个整数n,m,k。

接下来m行每行三个整数u,v,w,表示u到v存在一条长度为w的无向边。

输出

一行一个整数ans,为第k大的dist(i,j)

样例输入

4 5 2 1 2 4 4 3 5 2 3 2 4 1 1 3 1 3

样例输出

4

提示

【样例说明】

dist(1,2)=4 dist(1,3)=3 dist(1,4)=3 dist(2,3)=3 dist(2,4)=3 dist(3,4)=5

故第2大的dist(i,j)为4

【限制与约定】

测试点编号

n

m

k

特殊约定

1

n≤100

2

3

4

5

n≤1000

m=n-1

u=v-1

6

7

数据随机生成

8

9

10

11

n≤100000

n≤100000

k=1

k=1

12

13

m=n-1

u=v-1

14

15

16

17

数据随机生成

18

19

20

对于所有的数据,保证n≤100000,m≤min(n2,200000),k≤n(n-1)/2且图连通,w≤109。

题解

这道题是贪心+并查集

按w值从大到小排序,枚举边,判断这条边的两个端点是不是在同一个集合,如果不在同一个集合,那么这两个集合之间的任意两个点之间的dist就是当前这条边的w值(因为以前加进去的边都不小于这条边),就把两个集合的点数相乘,再用计数器加起来判断是否超过k即可

#include<bits/stdc++.h>
#define ll long long
#define N 100005
#define M 200005
using namespace std;
int n,m,f1,f2;
ll k,num;
int fa[N];
ll sum[N];
struct zcr{
    int x,y,v;
}a[M];
bool cmp(zcr x,zcr y){ return x.v>y.v;}
int getfather(int x){ if (x!=fa[x]) fa[x]=getfather(fa[x]);return fa[x];}
int main(){
    scanf("%d%d%lld",&n,&m,&k);
    for (int i=1;i<=n;i++) fa[i]=i,sum[i]=1;
    for (int i=1;i<=m;i++)
        scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].v);
    sort(a+1,a+1+m,cmp);
    num=0;
    for (int i=1;i<=m;i++){
        f1=getfather(a[i].x);
        f2=getfather(a[i].y);
        if (f1!=f2){
            num+=sum[f1]*sum[f2];
            if (num>=k){
                printf("%d\n",a[i].v);
                return 0;
            }
            fa[f1]=f2;
            sum[f2]+=sum[f1];
        }
    }
    return 0;
}

时间: 2024-10-21 13:29:25

YYHS-论战大原题的相关文章

一场CF的台前幕后(上)——转

前奏 大约4月份的时候,业界毒瘤pyx噔噔噔跑过来说:“酷爱!我YY了一道题!准备当CF的C” 我当时就被吓傻了."Yet another Chinese round?" “区间取模,区间求和” 感觉这题还不错?不过pyx嫌水了…… 好办!当时我刚刚出完动态仙人掌不久,于是一拍脑袋说:把这个问题出到仙人掌上去! 当然被pyx鄙视了…… 后来一直就没啥动静,直到5月底的CTSC. 试机的时候pyx给我看了套他出的神题……里面有一道题……我不小心读成了下面这个样子: “给定n个m维的模2意

[网络流专练6][线性规划与网络流剩余部分题解]

orz"orzGEOTCBRL" 6:lis 给定正整数序列x1 ,…… , xn. (1)计算其最长递增子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的递增子序列. (3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长 度为s的递增子序列.  看到题目就666了,前两问不是经典dp?因为序列是上升的,所以如果在x1前面加一个x1,个数显然多了f[x2][xn][s-1],或者xn后面加一个xn, 一样的……然后发现题意理解错T_T “多

【poj1091】 跳蚤

http://poj.org/problem?id=1091 (题目链接) 题意 给出一张卡片,上面有n+1个数,其中最大的数为m,每次可以向前或者向后走卡片上面的步数.问有多少种方案选出n个数,使得存在一种走的方案经过若干步后可以达到与起点距离为1的位置上. Solution 今天考试题,又是一道大原题... 我们假设卡片上的数分别为:{a1,a2,a3,a4······an,m},那么如果要满足题目要求,就是说存在一个数列x:{x1,x2,x3,x4······xn,xn+1}使得a1x1+

史上最强算法论战:请不要嘻哈,这是哈希[下]

史上最强算法论战:请不要嘻哈,这是哈希[下] 欢迎个人转发朋友圈,机构及媒体转载需在开篇声明,转自微信公号“知象科技” 论战主角之一龙博:知象科技CEO,欲了解龙博及知象科技,请点击文末“阅读原文”. 这是“美丽互联”微信群里的一次算法论战,感谢书记员硅谷寒(梁寒)精彩的说书般的整理. 书接上文 一夜过去了…孤独虎精神抖擞的回来了! [书记员注:上集说到独孤虎被龙博两次判零分,已经到了精神分裂的边缘.于是他决定回家休养生息,以图再战.果不其然,第二天,独孤虎首先跳出来,带来了他的第四种方案.我们

20 考研英语题源外刊精讲赏析 1~10 期外刊原文+翻译+点评

打卡日期记录: ===========遗忘曲线记录====查词用浏览器:复习刷遍数,用电子版文件m====== 20 考研英语题源外刊精讲赏析1~10 期外刊原文+翻译+点评 01-<美国执业证照制度在阻碍竞争> 本文选自 The Economist<经济学人> 2018 年 2 月 17 日一篇题为 America should get rid ofoppressive job licensing(职业证照制度在阻碍竞争)的文章. 作者指出,美国的职业证照制度并不能保护消费者利益

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题

[poj2104]可持久化线段树入门题(主席树)

解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序列的第k小,我们会想到离散化二分和线段树的做法, 而主席树只是保存了序列的前缀和,排序之后,对序列的前缀分别做线段树,具有差分的性质,因此可以求任意区间的第k小,如果主席树维护索引,只需要求出某个数字在主席树中的位置,即为sort之后v中的索引:若要求第k大,建树时反向排序即可 1 #include

旧题新做:从idy的视角看数据结构

“今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 second 给你一个长度为N 的整数序列,支持两种操作: • modity l r val 将区间[l,r] 中的所有数修改为val • query l r 询问区间[l,r] 所有数的和 分析:最简单的线段树,区间更改区间求和.但注意是更改,不是添改,sum与flag需同时覆盖. Problem 2.

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,