并查集:CDOJ1593-老司机破阵 (假的并查集拆除)
老司机破阵
Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
Problem Description
老司机的女朋友被坏人抓起来了,护女票心切的老司机心急火燎的赶到坏人藏匿女票的地点想要救出她,但是老司机的神通广大坏人们早有耳闻,等老司机赶到时已经有一个法阵摆在他的面前阻挡着他。
法阵是一条直线上的n个法力元件构成的,老司机每次可以将一个法力元件击碎,法阵的能量就是所有 连贯的元件能量和的最大值 。
老司机非常的自信,他有一套自己的破除法阵的方案(虽然不见得是最佳)
老司机希望能实时的关注着法阵的能量,一旦能量允许,他就破阵而入,救出女票。
忙着破阵的老司机自然没有功夫去计算他每步操作之后法阵的能量,他只能将此重任交与在座的各位大侠,请大家助他一臂之力。
Input
第一行n (1 ≤ n ≤ 100,000),为法力元件数量
第二行有n个数,为每个法力元件所含有的能量ei(0 ≤ ei ≤ 1e9)
第三行有n个数,为老司机击破法力元件的顺序
Output
输出n行,为老司机每次击破法力元件后法阵的能量。
Sample Input
5
1 2 3 4 5
4 2 3 5 1
8
5 5 4 4 6 6 5 5
5 2 8 7 1 3 4 6
Sample Output
6
5
5
1
0
8
18
16
11
8
8
6
6
0
解题心得:
- 别被题意给唬住了,可以去看看并查集的倒用,题意是叫你去将一个集合拆开,看起来很恐怖,其实完全是不需要的,只要按照拆开的顺序逆着来合并就可以了,运用一个并查集的知识,但是有也有要注意的东西,就是使用倒过来合并的时候叫你输出最大的能量顺序一开始应该是0,最后的那个所有能量的和其实是不存在的不应该输出,自己处理一下就好了。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
int num1[maxn],num2[maxn];
int father[maxn];
long long sum[maxn];
long long ans[maxn];
long long Max = 0;
bool vis[maxn];
int find(int x)
{
if(father[x] == x)
return x;
else
return father[x] = find(father[x]);
}
void merge(int a,int b)
{
int fa = find(a);
int fb = find(b);
if(fa != fb)
{
father[fb] = fa;
sum[fa] += sum[fb];//在集合合并的时候也要将他们的和加起来
}
}
long long Find(int x)
{
vis[x] = true;
if(sum[x] > Max)
Max = sum[x];
if(vis[x+1])//如果它的上一个存在就合并
{
merge(x,x+1);
if(sum[find(x)] > Max)
Max = sum[find(x)];
}
if(vis[x-1])//下一个存在也合并
{
merge(x,x-1);
if(sum[find(x)] > Max)
Max = sum[find(x)];
}
return Max;//记录每次连接的最大值
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
Max = 0;
memset(vis,0,sizeof(vis));
int t = 0;
for(int i=1; i<=n; i++)
{
scanf("%d",&num1[i]);
sum[i] = num1[i];
father[i] = i;
}
for(int i=1; i<=n; i++)
scanf("%d",&num2[i]);//记录拆除的顺序
ans[t++] = 0;//记录答案
for(int i=n; i>=1; i--)
{
long long now;
now = Find(num2[i]);
ans[t++] = now;
}
for(int i=t-2; i>=0; i--)
printf("%lld\n",ans[i]);
}
}
并查集:CDOJ1593-老司机破阵 (假的并查集拆除)的更多相关文章
- 并查集:CDOJ1594-老司机的奇幻漂流 (食物链)
老司机的奇幻漂流 UESTC - 1594 Problem Description 老司机在救出了女票之后,就和她在全世界旅游,有一天,他们来到了一个神奇的小岛上. 这个小岛上有三种动物,他们互相克制 ...
- 老司机带你玩转面试(5):Redis 集群模式 Redis Cluster
前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...
- 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透
前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...
- 老司机的奇怪noip模拟T2-huangyueying
2. 黄月英(huangyueying.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://w ...
- 老司机实战Windows Server Docker:2 docker化现有iis应用的正确姿势
前言 上一篇老司机实战Windows Server Docker:1 初体验之各种填坑介绍了安装docker服务过程中的一些小坑.这一篇,我们来填一些稍大一些的坑:如何docker化一个现有的iis应 ...
- 老司机带你开飞机 一: mssql on linux 安装指导
通常在本机开发环境中需要搭建所有的服务,还要修改本地的hosts,实在是不胜其烦.如今有了docker,完全不用污染本地环境,且看老司机带你搭建一个asp.net core的开发环境集群.愿你走出虚拟 ...
- 年薪30W的软件测试“老司机”工作经验
这几天,新入职的小MM提议“老司机”们把自己这些年的软件测试工作经验跟大家分享一下,让新同学学习学习,利用空闲时间我整理了一些,可能不全,勉强看看,这也算是对自己这些年的工作总结. 测试阶段划分 1. ...
- bugku秋名山老司机+写博客的第一天
bugku之秋名山老司机 题目连接:http://123.206.87.240:8002/qiumingshan/ 一点进去是这样的 请在两秒内计算这个式子...怎么可能算的出来 查看源码,无果.. ...
- 面试官问我,为什么老司机建议MySQL列属性尽量用 NOT NULL ?
本文阅读时间大约6分钟. 其实写这篇文章,也是来自一个知识星球读者的提问,他在二面的过程中被问到了,由于他简历中写道有 MySQL 调优经验,但这个问题没有回答好,二面被刷了. 其实我们刚学习 C 语 ...
随机推荐
- 047 Permutations II 有重复数字的全排列
给定一个可能包含重复数字的集合,返回所有可能的不同全排列.例如,[1,1,2] 有以下不同全排列:[ [1,1,2], [1,2,1], [2,1,1]] 详见:https://leetcode ...
- D - Simple String CSU - 1550
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1550 很久都没补这题,最近想学网络流,就看看,队友以前用网络流过的,Orz, 但是这题只需要简 ...
- Corn 表达式
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTr ...
- 数据结构之Hyperloglog
前置知识 调和平均数 通常我们求一堆数的平均数 就是把一堆数加起来除以这堆数的数量,如 x1, x2, x3, x4, .... ,xn的平均数 H = (x1 + x2 + x3 + x4 + xn ...
- sqlserver 删除两种方法比较
delete from tb where id=1 删除数据 truncate table tb where id=1 第一种 自增长id不会删除,第二种会删除
- js基础的自定义属性练习
js基础的自定义属性练习: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type ...
- 安装cadence遇到vcredist.msi找不到问题
在新装的win7 64位系统上安装cadence遇到了如下问题,最后一个群里面的大哥帮了大忙,解决办法如下: 用windowsinstallercleanup 将KB2467175清理掉再装caden ...
- JavaScript中三种字符串连接方式及其性能比较
参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...
- git如何强制用远程分支更新本地
git本地即使有修改如何强制更新: 本地有修改和提交,如何强制用远程的库更新本地.我尝试过用git pull -f,总是提示 You have not concluded your merge. (M ...
- Android商城开发系列(五)—— 商城首页回到顶部和搜索框布局实现
今天我们来开发商城的首页[输入搜索框]布局和点击右下角图片回到顶部的效果 搜索功能在App中很常见,尤其是在商城类的项目当中,一般都会提供很强大的搜索功能,App的搜索布局一般都是在App的顶部,如下 ...