stk

第二课 栈_队列_堆

冷暖自知 提交于 2019-12-03 10:14:49
内容概览及预备知识: 预备知识:栈与队列: STL基本的栈操作(stack): 1 #include <iostream> 2 using namespace std; 3 4 #include <stack> 5 int main(){ 6 stack <int> stk; 7 if(stk.empty()){ //判断是否为空 isempty() 8 cout <<"The Stack is empty!!!"<<endl; 9 } 10 stk.push(5); //压栈 11 stk.push(6); 12 stk.push(10); 13 14 cout <<"The Stack' top is " <<stk.top()<<endl; 15 stk.pop(); //弹出栈顶 16 stk.pop(); 17 cout <<"The Stack' top is "<<stk.top()<<endl; 18 cout <<"The Stack' size is "<<stk.size()<<endl; //栈中的size 19 20 return 0; 21 } View Code STL基本的队列操作(queue): 1 #include <iostream> 2 using namespace std; 3 4 #include <queue> 5 int main(

[HEOI 2014] 大工程

末鹿安然 提交于 2019-12-03 09:57:56
前几天讲了虚树,今天就来切一道虚树的题喽。 题目概述: 给你一棵树,有 \(q\) 个询问,每个询问给出 \(k\) 个点,两两连边,边的长度为其在树上的距离,求出这 \(k\) 个点连边总长度、最短的一条边以及最长的一条边。 其中 \(\sum_{i=1}^qk<=5^4\) 大体思路: 显然是道虚树的题,那就先构建棵虚树。 对于第二三两个询问,我们都可以通过一个非常简单的DP来实现,每个询问分别用两个数组求出以它为根,第一、第二(大/小)的路径的值,但是要注意这里的两个值不能都是从同一个子树中转移过来的。 关于第一个询问,我们考虑每一条边对于答案的贡献,不难发现其被加的次数为 \(siz[u]\times siz[v]\) ,那么我们把每一条边的贡献加起来即可。 具体实现 (坑爹细节) : 对于非询问点(即通过 \(LCA\) 关系而加入虚树的点),我们不妨称之为关系户。 关系户不能进入 \(siz\) 的统计(显然)。 关系户只能作为连接点,即只能以第一、第二(大/小)的路径的值相加来更新答案。(显然) 虚树的根为所有点加入完毕后,剩下的栈中的那个栈顶。(显然) 代码: #include <bits/stdc++.h> using namespace std; const int N=1e6+5,inf=1e9; int f[N][21],fir[N],sec[N],Fir

数据结构导论(第三章栈)

与世无争的帅哥 提交于 2019-12-03 05:17:08
一、栈 栈和队列可看作是特 殊的线性表,它们是 运算受限的线性表 定义: 栈是只能在表的一端(表尾)进行 插入和删除的线性表 允许插入及删除的一端(表尾)称为栈顶(Top); . 另一端(表头)称为栈底(Bottom)。 . 当表中没有元素时称为空栈 进栈——在栈顶插入一元素; 出栈——在栈顶删除一元素 特点:后进先出   栈中元素按a1,a2,a3,…an的次序进栈,出栈的第一个元素应 为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。 因此,栈称为后进先出线性表(LIFO)。 栈的用途: 常用于暂时保存有待处理的数据 。 栈的基本操作 (1)初始化栈:InitStack(S); (2)判栈空:EmptyStack (S); (3)进栈:Push (S,x); (4)出栈:Pop (S); (5)取栈顶: GetTop(S); 栈的分类: 按照顺序结构存储是顺序栈、按照链式结果存储是链栈 二、顺序栈 顺序栈—— 即栈的顺序实现; 栈容量——栈中可存放的最大元素个数; 栈顶指针 top——指示当前栈顶元素在栈中的位置; 栈空——栈中无元素时,表示栈空; 栈满——数组空间已被占满时,称栈满; 下溢——当栈空时,再要求作出栈运算,则称“下溢”; 上溢——当栈满时,再要求作进栈运算,则称“上溢”。 1、顺序栈的类型定义 const int maxsize=6; typedef

How to deal with SettingWithCopyWarning in Pandas?

匿名 (未验证) 提交于 2019-12-03 01:12:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: Background I just upgraded my Pandas from 0.11 to 0.13.0rc1. Now, the application is popping out many new warnings. One of them like this: E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE I want to know what exactly it means? Do I need to change something? How should I suspend the warning if I insist to use quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE ? The function

STK二次开发-Data Provider的使用

匿名 (未验证) 提交于 2019-12-03 00:26:01
在STK中,Report&Graph Manager控制面板用于生成STK对象(如卫星、地面站或Access等)的报告和图表,如卫星在J2000坐标系下的位置、速度等参数。它允许用户打开已存在的报告/图表、创建新的报告/图表以及改变报告/图表的格式。 Report&Graph Manager的打开方式有以下几种: - 菜单栏,路径为:“Analysis-Report & Graph Manager…”; - 工具栏中,点击图标 ;若工具栏中没有,则在工具栏空白处右键点击,在弹出的菜单中选择”Data Providers”即可显示; - 对象浏览器(Object Browser)中右键点击对象,在弹出的右键菜单中,选择“Analysis-Report & Graph Manager…”。 下图为某卫星对象的Report&Graph控制面板的GUI界面。展开“Installed Styles”即可看见软件内缺省安装的报告样式(Report Style)。注意,不同对象的缺省安装的报告样式内容不同。 本章节不再详细叙述通过STK GUI界面方式手动生成报告或图表的方式,而是阐述使用STK Object Model类库方式获取、生成具体的报告数据。 通过代码获取报告主要有两种方式:Connect指令方式和Object Model方式。两者获取Report的机理稍有不同,具体见下图。

洛谷P1310 表达式的值 题解 栈/后缀表达式的应用

为君一笑 提交于 2019-12-02 13:00:18
题目链接: https://www.luogu.org/problem/P1310 本题涉及算法:栈、前缀表达式转后缀表达式,动态规划思想。 这道题目我思考了好长时间,第一时间让我做的话我也做不出来。 看洛谷上面的题解给了我很大的启发。 其中最重要的两点启发是: 启发1:中缀加操作数预处理 将原始表达式中添加上‘.’,这些‘.’对应运算数(这么预处理能方便我接下来更方便地将前缀转后缀表达式进行处理); 启发2:动归思想 首先一个状态对应两个值,我暂且将它们设为 \(v0\) 和 \(v1\) ,其中: \(v0\) 表示该状态下结果为 \(0\) 的方案数; \(v1\) 表示该状态下结果为 \(1\) 的方案数。 那么,在前缀转中缀的时候,只有我们假设由两个状态 \(a\) 和 \(b\) 变换到新的状态 \(c\) ,那么: 如果进行的是 + 操作,则 \(c.v0 = a.v0 \times b.v0\) , \(c.v1 = a.v0 \times b.v1 + a.v1 \times b.v0 + a.v1 \times b.v1\) ; 如果进行的是 * 操作,则 \(c.v0 = a.v0 \times b.v0 + a.v0 \times b.v1 + a.v1 \times b.v0\) , \(c.v1 = a.v1 \times b.v1\) 。

基环树初步

对着背影说爱祢 提交于 2019-12-02 10:42:45
预备知识 说实话,基环树一般比较综合,所以一般只要就要具有图论基本知识便可以开始学习. 警告 博主实力不足,如果出错, 请用力D他 . 认识 基环树,原体是树,有树上任意连一条边,就成了一个环,即基环树,一般特征, ​ 个点 ​ 条边; 由于有树的特征,所以经常会用一些树的算法来计算基环树; 基础的知识 找环 寻找环,这是基环树的基础,也很简单. 考虑记录每个点是否访问过,当再次经过这个点时,那么这个点就能找出这个环了. 我们只要在dfs时记录点的前继即可. void get_cir(int x,int y,int f){ int temp=x;stk[++tot]=x;id[x]=tot;w[y]=f; do{ temp=pre[temp]; stk[++tot]=temp; id[temp]=tot; }while(temp!=y); sum[1]=w[y]; for(int i=2;i<=tot;i++) sum[i]=sum[i-1]+w[stk[i-1]]; }//记录环 ​ bool dfs1(int x,int fa){ vis[x]=1; for(int i=head[x];i;i=edge[i].next){ int y=edge[i].to; if(y==fa) continue; if(!vis[y]) { pre[y]=x,w[y]=edge[i].w;

初学虚树

我怕爱的太早我们不能终老 提交于 2019-12-02 09:13:25
今天考了个模拟赛,虚树的题我拿 \(LCT\) 粗暴卡过,然后被各路神仙疯狂嘲讽,然后就奋发图强,来学了个虚树。 虚树的概念 先放一个例题吧: [SDOI 2011]消耗战 例题单个询问的树形DP可以说是非常简单了,但是多个询问就会 \(GG\) ,于是我们痛定思痛,发现其实我们并不需要整棵树来转移,我们只需要得到每一个目标节点和他们的 \(LCA\) 所构成的树即可,而树的边权即为树上两点在原树上的路径中的最小值。 那么像这种由目标节点和他们的 \(LCA\) 所构成的树即为虚树。 虚树的构造 既然知道了啥是虚树,那么就让我们再来看看虚树应该怎么构造吧。 其实虚树的构造过程类似 \(dfs\) 。 我们先整个类似 \(dfs\) 的栈,这个栈里存的只有虚树上需要的节点。 那么对于一个新加入的目标节点 \(x\) (显然目标节点要按 \(dfs\) 序排序再加入),我们分两种情况讨论: \(x\) 在以 \(stk[top]\) 为根的子树中 \(x\) 不在以 \(stk[top]\) 为根的子树中 第一种情况很简单,直接把 \(x\) 加入栈即可。 让我们来具体研究一下第二种情况: 我们找到次栈顶结点 \((stak[top-1])\) 与 \(x\) 的 \(LCA\) ,我们只需要一直把次栈顶与 \(LCA\) 比较,若 \(dep[stk[top-1]]>dep[LCA]

计算几何 val.2

孤街浪徒 提交于 2019-12-01 17:10:40
目录 计算几何 val.2 几何单位结构体板子 旋转卡壳 基础概念 求法 模板 半平面交 前置芝士:线段交 S&I算法 模板 最小圆覆盖 随机增量法 时间复杂度 模板 后记 计算几何 val.2 前置芝士:基础操作以及凸包 本文主要写旋转卡壳、半平面交、最小圆覆盖要注意的内容 几何单位结构体板子 不全 (我知道 struct point{ double x,y; point(double x=0,double y=0): x(x),y(y){} //构造函数,非常方便 double operator*(point b){ //叉积 return x*b.y-y*b.x; } double operator^(point b){ //点积 return x*b.x+y*b.y; } point operator-(point b){ return point(x-b.x,y-b.y); } point operator+(point b){ return point(x+b.x,y+b.y); }//向量运算 point operator*(double b){ //数乘 return point(x*b,y*b); } db dis(){ //模长 return sqrt(x*x+y*y); } }b[N]; int comp0(double x){ return fabs(x)<

【SDOI2017】天才黑客

北城余情 提交于 2019-12-01 13:20:28
题面 题解 这是好久之前菊开讲的一道题目了。 可以发现在这道题目中,边比点更加重要,所以我们化边为点,将边权改为点权,边与边之间的边权就是题目所给的Trie树上LCA深度的和。 想到一个平方的暴力,每条边和它连向的点的出边连一条边。下一步考虑怎么优化。 对于每一个点,将它的入边和出边都拿出来,按照dfs序排序,那么可以考虑将每个点拆成入点和出点,因为 \(\operatorname{lcp}(i, j)\) 的值是 \(i \to j\) 之间所有的边的 \(\operatorname{lcp}\) 的最小值,于是前后缀优化连边就可以了。 可以考虑使用下面这个图来帮助理解: 说起来容易做起来难, 代码留给读者作为练习 代码 #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout) inline int read() { int data = 0, w = 1; char ch = getchar(); while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar(); if (ch ==