lly的数列询问

Description

这个问题很简单,lly lly lly给你一些提示,让你试着确定长度为n n n的数列A [1] A [2] ... A [n]的值,但是他想尽一切办法为大家降低难度:

因此lly lly lly会给定一些对你有用的m m m询问,每次询问lly lly lly会表明L,R,sum[L,R] L,R,sum [L,R] L,R,sum[L,R]:表示区间[L,R]的区间和(保证询问合法),让大家更好的解决这个问题,但是对于每个询问会有一个代价,代价就是(R−L)∗sum[L,R](R-L)* sum [L,R] (R−L)∗sum[L,R]。

那么问题就转化了,如何花费尽可能小的代价确定这个数列。

Input

输入第一行包括两个整数n,m(1≤n≤2∗105,0≤m≤5∗105)n,m(1 \leq n \leq 2*10^5,0 \leq m \leq 5*10^5)n,m(1≤n≤2∗105,0≤m≤5∗105)。

接下来有mmm行,每行包括三个整数,L,R,sum[L,R],(1≤L≤R≤n,sum[L,R]≤109)L,R,sum[L,R],(1 \leq L \leq R \leq n,sum[L,R] \leq 10^9)L,R,sum[L,R],(1≤L≤R≤n,sum[L,R]≤109)。

Output

输出包含一个整数,即最小花费,如果无论如何都无法确定这个数列就输出“lly tcl!”。

Sample Input 1

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

Sample Output 1

11

Sample Input 2

4 3
1 2 2
2 3 3
1 1 1

Sample Output 2

lly tcl!

Source

nuoyanli

思路

  • 题意:给我们一个长度为 n 的序列,但是我们不知道的它的元素是什么,之后给我们m个是提示,每次提示 给我一个们一个[L, R]区间 的元素和sum[L~R],每次提示有一个 最小的花费 (R−L)∗sum[L..R](R-L)*sum[L ..R](R−L)∗sum[L..R],问我们找出序列的n个元素是啥,需要的总共的最小花费是多少?

  • 分析:这题真实令人脑洞大开,对于这种区间元素是啥的题竟然可以转化成求 最小生成树 的问题(可惜本巨弱竟毫无察觉 ),对于这一题要求出序列的n个元素是啥?就等价于求出每个位置的前缀和 sum[ i ] ,我们已知 sum[0] = 0, 如果对于序列中的1~n点都 0 点联通(应用最小生成树的地方)的话,那么我们就能够求出所有的 sum[i],有了所有的sum[ i ] 之后我们通过相邻位置的前缀和相减就能够得到 n 个元素了,对于题目上的m次提示的条件我们就可以转化成 sum[R] - sum[L - 1], 以 L-1点 与R点之间建立一条 权值为 (R-L)* sum[L~R] 的边,这样根据m个条件建完图之后,用 Kruskal 或者 Prim 来跑一边最小生成树(在这个是时候我们要判断这个图能否全部连通),的出来的答案就是 总花费

  • 最后举个例子来证明可行,例如 1-3 的区间和为sum[3] - sum[0], 4 - 6的区间和为sum[6] - sum[4], 我们可以看到 如果 0与6联通 那么区间和 sum[ 6 ] - sum[0] == sum[6] - 0, 而在我们将 1-3、4-6区间,对应的 0 - 3 - 6 (这样我们就使 0 与 6间接联通了)联通的时候,那么这条边的边权和是 (sum[6] - sum[3]) + ( sum[3] - sum[0]) = sum[6] + sum[0], 这样我们就可以得到了 sum[6] 的值了。。。。。。。。。。。。。。。。。

题解

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;#define ll long long
const int Len = 5e5 + 10;
int n,m;struct Edge
{ll u,v,w;bool operator < (const Edge a) const { return w < a. w; }
} edge[Len];int pre[Len];ll find(ll x) { return x == pre[x] ? x : pre[x] = find(pre[x]); }void init()
{for(int i = 0; i <= n; i ++)pre[i] = i;
}int main()
{/* freopen("A.txt","r",stdin); */scanf("%d %d", &n, &m);init();ll l, r, sum;for(int i = 0; i < m; i ++){scanf("%lld %lld %lld", &l, &r, &sum);edge[i] = (Edge){ l-1, r, (r - l)*sum };}sort(edge, edge + m);int cnt = 0;ll u, v, w, Sp = 0;for(int i = 0; i < m; i ++){u = edge[i].u, v = edge[i].v, w = edge[i].w; int fu = find(u);int fv = find(v);if(fu != fv)pre[fu] = fv, cnt ++, Sp += w;}if(cnt < n) printf("lly tcl!\n");else        printf("%lld\n", Sp);return 0;
}

lly的数列询问(最小生成树 + 思维)相关推荐

  1. 【杭电错题】#11数列有序!——思维转换

    数列有序! 题目: 数列有序! Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序. ...

  2. 2021牛客暑期多校训练营3 B Black and white 最小生成树 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 对于每个数的位置(i,j)(i,j)(i,j),如果将这个位置染黑,那么我们连一个i−>j+ni->j+ni−>j+n的边,可以发现 ...

  3. 专题:数列信息传递问题转化为图论合点问题(ybtoj-数列询问+序列破解)

    文章目录 前言: 一.数列询问(取模) 解析 代码 二.序列破解(奇偶性) 解析 代码 thanks for reading! 前言: 在一个数列a中,对于一个大区间A和组成它的两个小区间a,b: 可 ...

  4. 《张宇考研数学基础30讲》思维导图-第2讲 数列极限

    <张宇考研数学基础30讲>思维导图-第2讲 数列极限 此思维导图为作者2022考研数学复习过程中整理的思维导图,结合宇哥授课内容,在宇哥<基础30讲>的思维导图上做了扩充,如有 ...

  5. 【AlgorithmTraining】08:Leetcode(上)

    Group1 1.LeetCode01 两数之和 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. 你可以假设每种输入 ...

  6. 【蓝桥杯】什么算法才是版本答案?近三年(2019-2021)蓝桥杯省赛涉及算法出现频率分析

    2022年的蓝桥杯比赛已经基本报名结束,寒假来临,如何抓住重点,快速掌握各种算法知识,在4月份的蓝桥杯省赛中取得好成绩呢?本文收集了近三年的4场蓝桥杯省赛题目,(2019年,2020年第二场,2020 ...

  7. haar级联分类器车辆检测_Haar级联分类器Open CV用于人脸检测的术语

    haar级联分类器车辆检测 Haar级联分类器概述(An overview of Haar cascade classifier) Haar cascade classifier is an open ...

  8. 用程序猿思维、程序设计师思维两种方式写求斐波那契数列的方法。

    //用Java实现斐波那契数列(Fibonacci) public class Test {public int f(int n)//n代表第几个数字.程序返回它相应的值{return n>2? ...

  9. 2021牛客暑期多校训练营3 B-Black and white(思维+最小生成树)

    B-Black and white 效仿codeforces1012 B. Chemical table(并查集+思维),只不过边带权,是的n+m个点联通,显然就是求最小生成树. Code1 Krus ...

最新文章

  1. 自动化测试系列-自动化测试框架那些事儿
  2. char值序列是什么Java_CharSequence和java之间的确切区别
  3. Express中错误处理中间件的使用
  4. if中加return_答应我,别再 if/else 走天下了可以吗?
  5. 用Curl测试POST
  6. Linux启动shell的快捷方式,Linux下为可执行shell脚本文件(.sh),制作桌面启动快捷方式...
  7. Python中的匿名函数及递归思想简析
  8. Android Device Chooser中显示Target unknown解决方法
  9. 数据结构(十七)数组和矩阵
  10. 8.看板方法---建立交付节奏
  11. hive split 注意事项
  12. [转载] 解决AndroidStudio连不上Android设备真机的问题
  13. 计算机数据结构图知识点,2011考研计算机数据结构复习重点解析:图的应用
  14. [源码和报告分享]基于Android-JavaEE-DB2实现的旧物交易平台
  15. Android自定义PreferenceScreen的Layout布局,并获取控件
  16. SuiteCRM的汉化
  17. PHP连接MySQL-踩坑总结
  18. Java ques: java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
  19. 智能门锁电路图_智能门锁原理图,智能锁工作原理科普
  20. 网吧无盘用华为服务器,50台主机网吧无盘服务器

热门文章

  1. php难学习吗,学php难吗
  2. 樱桃一次吃多少合适 这些知识一定要关心
  3. 2020蓝桥杯python——纪念日
  4. NS3学习记录(四)--加入新模型及聚合Aggregate
  5. Sqoop导入导出基本操作
  6. opencv打开网络摄像机实时视频
  7. php支付宝接口参数错误,php支付接口_php支付宝支付接口程序及参数详解
  8. Netty4实战第六章:ChannelHandler
  9. 5.5 除法的运算过程
  10. USB(九)2022-03-01