题目描述:
有一天,一个名叫顺旺基的程序员从石头里诞生了。又有一天,他学会了冒泡排序和独 立集。在一个图里,独立集就是一个点集,满足任意两个点之间没有边。于是他就想把这两 个东西结合在一起。众所周知,独立集是需要一个图的。那么顺旺基同学创造了一个算法, 从冒泡排序中产生一个无向图。

这个算法不标准的伪代码如下:

void bubblesortgraph(n,a[])

//输入:点数n,1到n的全排列a

//输出:一个点数为n的无向图G

{ 创建一个有n个点,0条边的无向图G。

do{ swapped=false

for i 从1 到n-1

if(a[i]>a[i+1])

{ 在G中连接点a[i]和点a[i+1]

交换a[i]和a[i+1]

swapped =true

}

}while(swapped);

输出图G。

}

//结束。

那么我们要算出这个无向图G最大独立集的大小。但是事情不止于此。顺旺基同学有时 候心情会不爽,这个时候他就会要求你再回答多一个问题:最大独立集可能不是唯一的,但 有些点是一定要选的,问哪些点一定会在最大独立集里。今天恰好他不爽,被他问到的同学 就求助于你了。

首先可以发现一定是在当前序列中的最长上升子序列,但是怎么才能判断当前数字一定在所有的最长上升子序列中呢?可以判断(以当前为开始的向左边的最长下降子序列,以当前为开始的向右的最长上升子序列)的二元组是唯一的否则一定有另一个可以替换,弄两次最长上升子序列就行了,具体的优化方法自己百度吧

输入
3
3 1 2
输出
2
2 3

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
using namespace std;
const int MAXN = 100000;
const int INF = 1e9+7;
int B[MAXN+10], LenB;
int a[MAXN+10], b[MAXN+10];
int A[MAXN+10], LenA;
int L[MAXN+10], R[MAXN+10];
map<pair<int, int>, int> check;
void Clear(int *s, int v, int n){for(int i=0;i<=n;i++)B[i] = v;
}
int main(){int n;scanf("%d", &n);for(int i=1;i<=n;i++){scanf("%d", &a[i]);b[i] = -a[i];}for(int i=1;i<=n;i++){int pos = lower_bound(A+1, A+1+LenA, a[i]) - A;L[i] = pos;LenA += int(A[pos] == 0);A[pos] = a[i];}for(int i=1;i<=n;i++) B[i] = -INF;for(int i=n;i>=1;i--){int pos = lower_bound(B+1, B+1+LenB, b[i]) - B;R[i] = pos;LenB += int(B[pos] == -INF);B[pos] = b[i];}printf("%d\n", LenA);for(int i=1;i<=n;i++)if(L[i] + R[i] - 1 == LenA)check[make_pair(L[i], R[i])]++;LenB=0;for(int i=1;i<=n;i++)if(L[i] + R[i] - 1 == LenA && check[make_pair(L[i], R[i])] == 1)B[++LenB] = i;for(int i=1;i<=LenB;i++)printf("%d ", B[i]);return 0;
}

转载于:https://www.cnblogs.com/JeremyGJY/p/5921659.html

【动态规划】【图论】[NOIP模拟赛]独立集相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  5. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  6. 20220104[动态规划 图论 建模][衢州市赛2017]环游衢州

    20220104[动态规划 图论 建模][衢州市赛2017]环游衢州 题目描述 Jason 想要带着他新叫的朋友环游 QZ,于是他把 QZ 划分成了 n 个地方,已知这 n 个地方由 m 条双向边相连 ...

  7. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

  8. NOIP 模拟赛 长寿花 题解

    NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...

  9. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

最新文章

  1. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据
  2. taro 重新加载小程序_taro-music一款开源网易云音乐小程序
  3. 史上最全!近千篇机器学习自然语言处理论文!都这儿了
  4. 404 Note Found 团队会议纪要
  5. SAP C4C 和 ERP 中的外部定价模块 - External Pricing原理介绍
  6. 计算机网络在线测试第二章,进行测验:-第2章-网络体系结构与网络协议测试.doc...
  7. java数组转对象_java将对象数组列表转换为POJO
  8. Kotlin — 协程简介与使用
  9. Mac上的硬盘有问题该如何修复?
  10. php 简繁体转换类库,简体中文转换为繁体中文的PHP函数
  11. 吊打面试官系列之:移动APP测试开发面试题汇总,对标P7职位~ ~熬夜整理,建议收藏!!!
  12. 产品手册API文档模板
  13. 8路sdi(DVI)多媒体分布式互动录播主机4K输出
  14. vue3.0 前进刷新后退缓存
  15. 计算两个数之差的绝对值
  16. 两个服务共用一个微信支付
  17. 万邦微信公众号根据关键词取文章列表 API 返回值说明
  18. 创建自己的RSS服务——debian docker TinyTinyRSS搭建
  19. 幽默笑话,隔壁的长舌妇,木子家原创
  20. 笑话集网站最近更新网站内容采集

热门文章

  1. Ubuntu创始人谈Windows 7、Chrome OS
  2. 年假.........
  3. 分析 C# 2.0 新特性 -- 范型(Generics)
  4. Intellij关闭自动更新
  5. shuffle操作图解以及job-stage-task-partition区别
  6. ubuntu中clion更换cmake版本以及文本背景颜色
  7. 机器学习(三十四)——策略梯度
  8. linux gnome 桌面,GNOME Linux桌面
  9. nohup: 忽略输入重定向错误到标准输出端_Linux 重定向与管道
  10. 架构整洁之道, 看这一篇就够了!