Erasing Vertices 2

Erasing Vertices 2

题意

给定一个 \(n\) 个点 \(m\) 条边的简单无向图。点 \(i\) 上有一个正整数点权 \(a_i\),做 \(n\) 此操作,每次选择一个点 \(x\),删掉这个点的代价是与它相连的点(没被删掉)的点权之和,问 \(n\) 次操作的代价最大值最小是多少。

思路

显然,代价最小的肯定能被删掉,所以先删最小的,只有删了最小的,才能影响大的能被删掉,所以用个单调队列记录代价最小的然后一点一点的更新与删除。

代码

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;
using ll = long long;

const int MaxN = 2e5 + 10;

struct S {
  ll x, t;

  bool operator<(const S &j) const {
    return t > j.t;
  }
};

ll a[MaxN], d[MaxN], n, m, ans;
priority_queue<S> q;
vector<int> g[MaxN];
bool vis[MaxN];

int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 1, u, v; i <= m; i++) {
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
    d[u] += a[v], d[v] += a[u];
  }
  for (int i = 1; i <= n; i++) {
    q.push({i, d[i]});
  }
  while (!q.empty()) {
    S u = q.top();
    q.pop();
    if (vis[u.x]) {
      continue;
    }
    vis[u.x] = 1, ans = max(ans, u.t);
    for (int i : g[u.x]) {
      q.push({i, (d[i] -= a[u.x])});
    }
  }
  cout << ans << endl;
  return 0;
}

时间复杂度

更新与删除:\(O(n+m)\)

总共:\(O(n + m)\)

本文转载于网络 如有侵权请联系删除

相关文章

  • oracle命令创建新用户

    大家好,又见面了,我是你们的朋友全栈君。一、sqlplus连接oracle1、sqlplus登录Windows需要sqlplus命令框,获取CMD窗口下输入sqlplus(需要先安装成功oracle)2、输入用户名和口令(密码)3、以sysdba身份连接oracleconnsys/密码assysdba4、查看当前查看当前实例名selectinstance_namefromv$instance5、创建表空间createtablespacedb-testdatafile‘D:\dbSpace\db-test.dbf’size200M;createtablespace表空间名称datafile‘文件路径’size空间大小;注意:表空间名不能用横线”-“,可以用下划线”_”6、创建用户createuserc##db-testidentifiedbytest123456defaulttablespacedb-test;createuserc##用户名identifiedby密码defaulttablespace表空间名;7、用户授权grantdbato用户;8、测试发布者:全栈程序员栈长,转载请

  • 你还在使用if来判断是否实体类或者某个属性为空吗?教你使用Assert.notNull()[断言]

    一、前言最近在阅读公司项目的代码时,看到了一个工具类:org.springframework.util下的方法很多很好用,今天带大家一起了解一下这个工具类的**Assert.notNull()**方法,来告别if判断实体类是否为null和某个属性是否为null。二、方法展示importorg.springframework.util.Assert; publicclassAssertTest{ publicstaticvoidmain(String[]args){ //这里一般为请求mapper.xml进行查询数据库,数据库返回为空 Useruser=null; Assert.notNull(user,"实体类user为空"); //这里我们演示实体类的某个属性判断是否为空 Useruser1=newUser(); Assert.notNull(user1.getName(),"用户名字为空"); //这种情况就失效了,所以应用场景一般是判断查询出数据库的一些实体类或者字段 Stringname=""; Asser

  • LeetCode MySQL 1571. 仓库经理

    1.题目表:Warehouse+--------------+---------+ |ColumnName|Type| +--------------+---------+ |name|varchar| |product_id|int| |units|int| +--------------+---------+复制(name,product_id)是该表主键. 该表的行包含了每个仓库的所有商品信息.表:Products+---------------+---------+ |ColumnName|Type| +---------------+---------+ |product_id|int| |product_name|varchar| |Width|int| |Length|int| |Height|int| +---------------+---------+复制product_id是该表主键. 该表的行包含了每件商品以英尺为单位的尺寸(宽度,长度和高度)信息.写一个SQL查询来报告,每个仓库的存货量是多少立方英尺.仓库名 存货量 返回结果没有顺序要求.查询结果如下例所示.

  • TDSQL 安装部署(多图预警)

    墨墨导读:分布式数据库(TencentDistributedSQL,TDSQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。 大会以“自研·智能·新基建——云和数据促创新生态融合新十年”为主题,相邀数据英雄,总结过往十年历程与成绩,展望未来十年趋势与目标! TDSQL按照官方要求配置相对较高,现通过4台虚拟机演示TDSQL的全套部署。如有不对的地方请指证wx:moonstar00机器数量规划:tdsql规划机器如下:4台(CPU:2core/MEM:8G/HDD:50G),内存至少5G以上,CPU至少2C以上,否则检查通不过TDSQL安装部署1.设主机名 hostnamectlset-hostnamehuyidb01 hostnamectlset-hostnamehuyidb02 hostnamectlset-hostnamehuyidb03 hostnamectlset-hostnamehuyidb04 2.配置主机名 vim/e

  • 测试思想-流程规范 用例优先级定义与使用规范 V1.0

    用例优先级定义与使用规范V1.0By:授客1.规范说明目的对软件测试过程中的用例级别进行详细描述及标准化定义,明确不同测试阶段的测试范围,减少测试冗余投入,提高测试效率,建立测试质量基线,减少生产故障事件。适用范围xx内部研发项目传达对象xx测试团队优化记录暂无2.规范正文用例优先级定义用例优先级划分成4个等级,P1,P2,P3,P4,具体定义如下:级别划分标准划分参考P1每个迭代,都要被执行的用例主流程 用例涉及主流程业务功能,执行失败会导致后续多处重要功能不可用,比如“登录”,”提交订单” 财务交易 用例涉及现金,优惠券等财务交易业务功能,比如订单支付 高频使用 用例涉及高频率使用的业务功能,比如商家客服咨询 较大用户量 用例涉及使用者数量较大的业务功能 其它重要功能 用例涉及除上述之外的其它重要业务功能(可能是异常校验)P2每个迭代,P1级用例除外,需要在“系统测试”,“预发布回归测试”阶段执行的“当前迭代用例”系统重要功能 用例涉及一些比对P1级次重要业务功能 基础功能 用例涉及一些基础功能,比如,查询,导出P3每个迭代,P1,P2级用例除外,需要在“系统测试”阶段执

  • 360°全方位比较PostgreSQL和MySQL

    360°全方位比较PostgreSQL和MySQL一、原文https://www.enterprisedb.com/blog/postgresql-vs-mysql-360-degree-comparison二、摘要本文对MySQL和PostgreSQL进行详细的比较,方便选择。1、为什么使用PostgreSQL2、为什么使用MySQL3、易用性4、语法5、数据类型6、复制与集群7、视图8、触发器9、存储过程10、查询11、分区12、表的可伸缩性13、NoSQL能力14、安全15、分析函数16、GUI工具17、性能18、Adoption19、最佳环境三、PGvsMySQL:选择哪个?PostgreSQL和MySQL都是最流行的开源数据库。MySQL被认为是世界上最流行的数据库,而PostgreSQL被认为是世界上最先进的数据库。MySQL并不完全符合SQL标准,并且很多PG上的特性并不支持。这就是为什么PG受到大量开发者喜欢的原因,并且现在PG越来越流行。前几年,Oracle收购了MySQL,导致MySQL的出现两个版本:商业版和社区版。对于后者,由于Oracle控制了MySQL的开发

  • Joomla 3.4.6-RCE预警

    0x00:简介1、Joomla是一套全球有名的CMS系统。2、Joomla基于PHP语言加上MySQL数据库所开发出来的WEB软件系统,目前最新版本是3.9.12。 3、Joomla可以在多种不同的平台上部署并且运行。 ‍‍0x01:环境配置 RCE:gayhub上有。复制环境下载:https://downloads.joomla.org/it/cms/joomla3/3-4-6复制0x02:漏洞复现0、漏洞位置http://x.x.x.x/configuration.php复制影响范围:3.0.0-3.4.61、漏洞验证python3Joomla-3.4.6-RCE.py-thttp://172.20.10.4复制显示“Vulnerable”证明存在漏洞2、漏洞利用 执行成功并在“configuration.php”写入随机密码的一句话木马上图的密码为:kyevgbxjmwivdvegohfzwuukuzswxqquthlrsollpxzgiifumi3、蚁剑链接测试0x03:漏洞预防1、部署安全狗对于网站目录文件的查杀2、更新至最新版本3.9.12 ‍

  • 纯代码在WordPress后台顶栏添加链接

    有些插件或者表单内容需要经常查看,单如果插件没有提供很好的入口,就要越过一层层的选项去。很麻烦在当前主题functions.php里添加如下代码,即可简单实现。functionadd_toolbar_link($wp_admin_bar){ $plugin_manage=array( 'id'=>'plugin_manage', 'title'=>'WPPAY',//名称 'href'=>'https://www.zmki.cn/wp-admin/admin.php?page=wppay_orders_page',//链接 ); $wp_admin_bar->add_node($plugin_manage); } add_action('admin_bar_menu','add_toolbar_link',999);复制本文源自钻芒博客:https://www.zmki.cn/4764.html

  • 洛谷P4344 [SHOI2015]脑洞治疗仪(ODT)

    题意题目链接SolODT板子题。操作1直接拆区间就行。#include<bits/stdc++.h> #definefifirst #definesesecond constintMAXN=2e5+10; usingnamespacestd; inlineintread(){ charc=getchar();intx=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); returnx*f; } intN,M; #definesitset<Node>::iterator structNode{ intl,r; mutableintv; booloperator<(constNode&rhs)const{ returnl<rhs.l; }

  • 谷歌大脑深度学习从入门到精通视频课程[6.7]:自动编码器——contractive 自编码器

    AI100已经引入HugoLarochelle教授的深度学习课程,会在公众号中推送,并且对视频中的PPT进行讲解。课后,我们会设计一系列的问题来巩固课程中的知识。本节课是HugoLarochelle教授深度学习第六章节的第七节课。课程主要内容 回顾上一节的内容,介绍隐藏层神经元个数多于输入层时的情况。(P2)讲解contractive自编码器。(P3-P7)图解contractive自编码器。(P8-P12)对比去噪自编码器和contractive自编码器。(P13)视频内容 PPT解释如下:P1.首页P2.回顾上一节的内容,介绍隐藏层神经元个数多于输入层时的情况。P3-P7.讲解contractive自编码器。P8-P12.图解contractive自编码器。P13.对比去噪自编码器和contractive自编码器。课程作业没有作业:)讲师简介HugoLarochelle教授师从YoshuaBengio教授,并且在GeoffreyHinton教授那里做了两年的博士后工作。目前HugoLarochelle教授是GoogleBrain的研究科学家。他在Youtube上面的神经网络课程视频

  • 数据处理——One-Hot Encoding

    一、One-HotEncodingOne-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。  在实际的机器学习的应用任务中,特征有时候并不总是连续值,有可能是一些分类值,如性别可分为“male”和“female”。在机器学习任务中,对于这样的特征,通常我们需要对其进行特征数字化,如下面的例子:有如下三个特征属性:性别:["male","female"]地区:["Europe","US","Asia"]浏览器:["Firefox","Chrome","Safari","InternetExplorer"]对于某一个样本,如["male","US","InternetExplorer"],我们需要将这个分类值的特征数字化,最直接的方法,我们可以采用序列化的方式:[0,1,

  • LINQ基础概述

    介绍LINQ基础之前,首说一下LINQ 的历史和LINQ是什么,然后说一下学习LINQ要了解的东西和LINQ基础语法LINQ 的历史从语言方面的进化 –委托 –匿名方法 –Lambda表达式 –Linq查询表达式上边这四个我会在下边一一解说从时间方面的演进 –2004年 –2005年9月,C#2.0的PDC上发布 –2005年11月,C#2.0预览版 –2006年1月,VB8.0预览版 –2007年11月,.net3.5发布LINQ是什么LINQ是语言级集成查询(LanguageINtegratedQuery) LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询 LINQ的目标是降低访问数据的复杂度 LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用 能够更好地与编程模型集成 可以在VisualStudio中进行智能提示 动态编程LinQ目的面向对象技术诞生以来并没有解决降低访问和整合信息数据的复杂度的问题。其中两个最主要访问的数据源与数据库和XML相关。使用LINQ的目的是为了提供一个解决对象关系映射问题的方案,同时简化对象和数据源的交互。

  • 仗剑走天涯——『那些年,我遇到的坑』

    javaSE for—each不能操作元素本身 我的需求   将只包含1和0的二维数组的所有元素反置,即所有1变成0、0变成1。   原始数组: 我的做法   使用for—each操作数组: publicclasstest{ publicstaticvoidmain(String[]args){ int[][]array={{0,0,1,1},{1,0,1,0},{1,1,0,0}}; //for-each操作 for(int[]arr:array){ for(intk:arr){ k^=1; } } } }复制   乍一看,没啥问题。   但是,我们来看看操作后的数组:   数组元素完全没有变化,和原始数组一模一样。   查了一下,for—each的底层实现是迭代器,就是在循环中拿到的是每一个元素的值(可以理解为拷贝其值),而不是每一个元素本身。   因此,我们并不能使用for—each来对数组元素本身进行操作,只能使用数组元素本身。 正确的做法   使用正常的for循环,来对数组元素本身进行操作: publicclasstest{ publicstaticvoid

  • Python进阶: Decorator 装饰器你太美

    函数->装饰器   函数的4个核心概念   1.函数可以赋与变量 deffunc(message): print('Gotamessage:{}'.format(message)) send_message=func send_message('helloworld') #输出 #Gotamessage:helloworld复制   2.函数可以当作函数的参数 defget_message(message): return'Gotamessage:'+message defroot_call(func,message): print(func(message)) root_call(get_message,'helloworld') 输出 #Gotamessage:helloworld复制   3.函数里嵌套函数 deffunc(message): defget_message(message): print('Gotamessage:{}'.format(message)) returnget_message(message) func('helloworld

  • 各类STL的使用

    stack stack<int>sta;//定义一个栈sta sta.push(a);//将a入栈 sta.pop();//将栈顶元素出栈 sta.top();//访问栈顶元素 sta.empty();//bool类型,若sta为空返回true,不为空返回false sta.size();//返回栈的大小 //注意,栈没有自带的清空操作,须要手动清空复制  queue queue<int>que;//定义一个队列 que.push(a);//将a入队 que.pop();//将队首元素出队 que.front();//访问队首元素 que.size();//得到que的大小 que.empty();//bool类型,que为空则返回true,不为空返回false //和栈一样,队列已没有清空函数,须要手动清空复制 deque deque<int>deq; deq.push_front(a); deq.push_back(a); deq.pop_front(a); deq.pop_back(a); deq.size(); deq.e

  • PID控制器(比例-积分-微分控制器)- V

    LinearActuator-PIDControl Introduction ThisapplicationguideisdesignedtoexplainthebasicsofPIDcontrolandhowtoimplementabasiccontrolloopusingPhidgets. Onceimplemented,thecontrolloopwillallowthelinearactuatortomovetoaprecisepositionandremainthere,evenifanexternalforcetriestomoveit. PIDControlBasics ProportionalControl Thegoalofacontrolloopistousedatafromthefeedbackdevice(inthiscase,thepotentiometer)toiterativelyadjusttheoutput untilithasreachedthetargetvalue. Forexample,considerthissimplecontrolloo

  • 最长回文串

    题目描述 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如“Aa”不能当做一个回文字符串。 注意:假设字符串的长度不会超过1010。 示例1: 输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd",它的长度是7。 复制 思路 通过分析,可以发现回文串根据中心位置对称,且最多在中心点有一个奇数字母 例如: acccca accbcca 复制 所以我们只需要遍历数组,查找出偶数字母的数量,最后判断是不是有奇数个字母即可。 题解 列出一种比较容易理解的题解: publicintfun1(Stringstr){ int[]count=newint[128]; //遍历数组,查找出每个字符的数量 for(charc:str.toCharArray()){ count[c]++; } //记录最大长度 intmax=0; //判断是否有奇数个的字母 booleanfalg=false; for(inti:count){ //判断是否为偶数个 if(i%2==0)

  • 练习-判断年份/月份输出对应的天数

    //请用户输年份,再输入月份,输出该月的天数.(结合之前如何判断闰年来做) Console.WriteLine("请输入一个年份"); try { intyear=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入一个月份"); try { intmonth=Convert.ToInt32(Console.ReadLine());//1-12 if(month>=1&&month<=12) { intday=0;//声明一个变量用来存储天数 switch(month) { case1: case3: case5: case7: case8: case10: case12:day=31; break; case2: //由于2月有平年和闰年的不同所以首先要判断一下当年是不是闰年 if((year%400==0)||(year%4==0&&year%100!=0)) { day=29; } else { day=28; } break; //46911 default:day=3

  • python socket

    importsocket mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) mysock.connect(('data.pr4e.org',80)) cmd='GEThttp://data.pr4e.org/romeo.txtHTTP/1.0\n\n'.encode() mysock.send(cmd) whileTrue: data=mysock.recv(512) iflen(data)<1: break print(data.decode()) mysock.close()复制  

  • 渗透测试-19:业务逻辑漏洞

    业务逻辑漏洞 逻辑漏洞就是指攻击者利用业务/功能上的设计缺陷,获取敏感信息或破坏业务的完整性,一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处 逻辑漏洞的破坏方式并非是向程序添加破坏内容,而是利用逻辑处理不严密、代码问题或固有不足,操作上并不影响程序运行,在逻辑上是顺利执行的 这种漏洞一般的防护手段或设备无法阻止,因为走的都是合法流量,也没有防护标准 支付漏洞 在支付订单时,可以篡改价格为任意金额;或者可以篡改运费或数量为负数,导致总金额降低 这个漏洞的关键在于服务器没有验证这些数字是否小于0、价格没有从服务器端获取、数量是否大于0等 曾经有不少体量不小的电子商务网站都出现过支付漏洞,最终导致的结果是不花钱或者花很少的钱买更多的东西,还真的有不少人测试漏洞之后真的收到了东西,这种天上掉馅饼的漏洞太有诱惑力了 利用方式 支付漏洞,是一种简单的逻辑漏洞,支付漏洞的主要利用方式: 修改支付价格 修改商品编号为负值或为高价商品的编号 修改支付状态 修改订单数量 修改附属值(比如优惠券),选择优惠券后修改金额大于等于商品的价格 越权支付,用别人的钱包购买自己的东西 修复方

  • 驼峰命名法

    驼峰命名法   使用前注意事项: 1、由于Java面向对象编程的特性,在命名时应尽量选择名词 2、驼峰命名法(Camel-Case):当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,首字母以小写开头,每个单词首字母大写(第一个单词除外)。 如:myFirstName 一包名的书写规范(Package) 推荐使用公司或机构的顶级域名为包名的前缀,目的是保证各公司/机构内所使用的包名的唯一性。包名全部为小写字母,且具有实际的区分意义。 1.1一般要求1、选择有意义的名字,能快速地传达该类的用途。 2、所有包的命名必须采用小写英文字母。 1.2实际应用应用系统中经常应用分层,Dao层(数据库访问)、Service层(业务处理)、Web层(页面控制action类)。 1、包名的前几个为固定名称,如果是网站的话,采用网站的域名的反写,如果域名还没有确定的话,采用公司固定的几个名称。如:net.vschool 2、在包名的接下来一个单词为模块的名称。如:用户模块,包名为net.vschool.user 3、关于模块的访问操作,采用分层形式,一般

相关推荐

推荐阅读