bzoj4046

分组赛的题……madan原题,考试想不出来真是SB得不行

首先,从大往小加边,每次加边如果成环必然弹出环上最大边

考虑询问[x,y],如果边权在[x,y]的边弹出了小于等于y的边j,说明j不在最小生成树上

其余边权在[x,y]的边都在最小生成树上

因此我们每次只要询问,在一段区间内边权小于等于y的边权和是多少,显然用主席树维护

处理弹出的最大边可以暴力,因为n不大

但我写了lct还是t真是简直了……

  1 const inf=10000007;
  2 type way=record
  3        x,y,z:longint;
  4      end;
  5      node=record
  6        l,r,s:longint;
  7      end;
  8 
  9 var tree:array[0..210010*20] of node;
 10     a:array[0..100010] of way;
 11     h,st,w,f,c,fa,mx:array[0..120010] of longint;
 12     son:array[0..120010,1..2] of longint;
 13     rev:array[0..120010] of boolean;
 14     ans,j,len,wh,p,i,t,tt,n,m,q,x,y:longint;
 15 
 16 procedure swap(var a,b:longint);
 17   var c:longint;
 18   begin
 19     c:=a;
 20     a:=b;
 21     b:=c;
 22   end;
 23 
 24 procedure sort(l,r:longint);
 25   var i,j,x:longint;
 26       y:way;
 27   begin
 28     i:=l;
 29     j:=r;
 30     x:=a[(l+r) shr 1].z;
 31     repeat
 32       while a[i].z>x do inc(i);
 33       while x>a[j].z do dec(j);
 34       if not(i>j) then
 35       begin
 36         y:=a[i]; a[i]:=a[j]; a[j]:=y;
 37         inc(i);
 38         dec(j);
 39       end;
 40     until i>j;
 41     if l<j then sort(l,j);
 42     if i<r then sort(i,r);
 43   end;
 44 
 45 function max(a,b:longint):longint;
 46   begin
 47     if a>b then exit(a) else exit(b);
 48   end;
 49 
 50 function getf(x:longint):longint;
 51   begin
 52     if f[x]<>x then f[x]:=getf(f[x]);
 53     exit(f[x]);
 54   end;
 55 
 56 function root(x:longint):boolean;
 57   begin
 58     exit((son[fa[x],1]<>x) and (son[fa[x],2]<>x));
 59   end;
 60 
 61 procedure update(x:longint);
 62   var l,r:longint;
 63   begin
 64     l:=son[x,1]; r:=son[x,2];
 65     mx[x]:=x;
 66     if w[mx[l]]>w[mx[x]] then mx[x]:=mx[l];
 67     if w[mx[r]]>w[mx[x]] then mx[x]:=mx[r];
 68   end;
 69 
 70 procedure rotate(x,w:longint);
 71   var y:longint;
 72   begin
 73     y:=fa[x];
 74     if not root(y) then
 75     begin
 76       if son[fa[y],1]=y then son[fa[y],1]:=x
 77       else son[fa[y],2]:=x;
 78     end;
 79     fa[x]:=fa[y];
 80     son[y,3-w]:=son[x,w];
 81     if son[x,w]<>0 then fa[son[x,w]]:=y;
 82     son[x,w]:=y;
 83     fa[y]:=x;
 84     update(y);
 85   end;
 86 
 87 procedure push(x:longint);
 88   begin
 89     if rev[x] then
 90     begin
 91       rev[son[x,1]]:=not rev[son[x,1]];
 92       rev[son[x,2]]:=not rev[son[x,2]];
 93       swap(son[x,1],son[x,2]);
 94       rev[x]:=false;
 95     end;
 96   end;
 97 
 98 procedure splay(x:longint);
 99   var i,y,t:longint;
100       fl:boolean;
101   begin
102     i:=x;
103     t:=0;
104     while not root(i) do
105     begin
106       inc(t);
107       st[t]:=i;
108       i:=fa[i];
109     end;
110     inc(t);
111     st[t]:=i;
112     for i:=t downto 1 do
113       push(st[i]);
114     if t=1 then exit;
115     fl:=true;
116     while fl do
117     begin
118       y:=fa[x];
119       if y=st[t] then
120       begin
121         if son[y,1]=x then rotate(x,2)
122         else rotate(x,1);
123         fl:=false;
124       end
125       else begin
126         if fa[y]=st[t] then fl:=false;
127         if son[fa[y],1]=y then
128         begin
129           if son[y,1]=x then rotate(y,2)
130           else rotate(x,1);
131           rotate(x,2);
132         end
133         else begin
134           if son[y,1]=x then rotate(x,2)
135           else rotate(y,1);
136           rotate(x,1);
137         end;
138       end;
139     end;
140     update(x);
141   end;
142 
143 procedure access(x:longint);
144   var y:longint;
145   begin
146     y:=0;
147     repeat
148       splay(x);
149       son[x,2]:=y;
150       update(x);
151       y:=x;
152       x:=fa[x];
153     until x=0;
154   end;
155 
156 procedure makeroot(x:longint);
157   begin
158     access(x);
159     splay(x);
160     rev[x]:=not rev[x];
161   end;
162 
163 procedure link(x,y:longint);
164   begin
165     makeroot(x);
166     fa[x]:=y;
167   end;
168 
169 procedure cut(x,y:longint);
170   begin
171     makeroot(x);
172     access(y);
173     splay(y);
174     son[y,1]:=0; fa[x]:=0;
175   end;
176 
177 function get(x,y:longint):longint;
178   begin
179     makeroot(x);
180     access(y);
181     splay(y);
182     exit(mx[y]);
183   end;
184 
185 function build(l,r:longint):longint;
186   var m,q:longint;
187   begin
188     inc(t); q:=t;
189     tree[q].s:=0;
190     if l<>r then
191     begin
192       m:=(l+r) shr 1;
193       tree[q].l:=build(l,m);
194       tree[q].r:=build(m+1,r);
195     end;
196     exit(q);
197   end;
198 
199 function add(l,r,last,x,y:longint):longint;
200   var m,q:longint;
201   begin
202     inc(t); q:=t;
203     if l=r then tree[q].s:=tree[last].s+c[x]*y
204     else begin
205       m:=(l+r) shr 1;
206       if x<=m then
207       begin
208         tree[q].r:=tree[last].r;
209         tree[q].l:=add(l,m,tree[last].l,x,y);
210       end
211       else begin
212         tree[q].l:=tree[last].l;
213         tree[q].r:=add(m+1,r,tree[last].r,x,y);
214       end;
215       tree[q].s:=tree[tree[q].l].s+tree[tree[q].r].s;
216     end;
217     exit(q);
218   end;
219 
220 function ask(l,r,x,y,k:longint):longint;
221   var m:longint;
222   begin
223     if l=r then
224     begin
225       if c[l]<=k then exit(tree[y].s-tree[x].s)
226       else exit(0);
227     end
228     else begin
229       m:=(l+r) shr 1;
230       if k<=c[m] then exit(ask(l,m,tree[x].l,tree[y].l,k))
231       else exit(tree[tree[y].l].s-tree[tree[x].l].s+ask(m+1,r,tree[x].r,tree[y].r,k));
232     end;
233   end;
234 
235 function find1(l,r,x:longint):longint;
236   var m:longint;
237   begin
238     find1:=r+1;
239     while l<=r do
240     begin
241       m:=(l+r) shr 1;
242       if (c[a[m-1].z]>x) and (c[a[m].z]<=x) then exit(m);
243       if c[a[m].z]<=x then r:=m-1 else l:=m+1;
244     end;
245   end;
246 
247 function find2(l,r,x:longint):longint;
248   var m:longint;
249   begin
250     find2:=l-1;
251     while l<=r do
252     begin
253       m:=(l+r) shr 1;
254       if (c[a[m].z]>=x) and (c[a[m+1].z]<x) then exit(m);
255       if c[a[m].z]>=x then l:=m+1 else r:=m-1;
256     end;
257   end;
258 
259 begin
260   readln(tt);
261   while tt>0 do
262   begin
263     dec(tt);
264     readln(n,m);
265     for i:=1 to n+m do
266     begin
267       f[i]:=i;
268       fa[i]:=0; son[i,1]:=0; son[i,2]:=0;
269       w[i]:=0; rev[i]:=false;
270     end;
271     for i:=1 to m do
272       readln(a[i].x,a[i].y,a[i].z);
273     sort(1,m);
274     for i:=1 to m do
275       w[n+i]:=a[i].z;
276     p:=1;
277     c[1]:=a[m].z;
278     a[m].z:=1;
279     for i:=m-1 downto 1 do
280     begin
281       if a[i].z<>c[p] then
282       begin
283         inc(p);
284         c[p]:=a[i].z;
285       end;
286       a[i].z:=p;
287     end;
288     t:=0;
289     h[0]:=build(1,p);
290     for i:=1 to m do
291     begin
292       x:=getf(a[i].x);
293       y:=getf(a[i].y);
294       h[i]:=h[i-1];
295       if x<>y then f[x]:=y
296       else begin
297         wh:=get(a[i].x,a[i].y);
298         h[i]:=add(1,p,h[i],a[wh-n].z,-1);
299         cut(a[wh-n].x,wh);
300         cut(a[wh-n].y,wh);
301       end;
302       h[i]:=add(1,p,h[i],a[i].z,1);
303       link(a[i].x,n+i);
304       link(a[i].y,n+i);
305     end;
306     c[p+1]:=inf;
307     a[0].z:=p+1;
308     a[m+1].z:=0;
309     c[0]:=-1;
310     readln(q);
311     ans:=0;
312     for i:=1 to q do
313     begin
314       readln(x,y);
315       x:=x-ans;
316       y:=y-ans;
317       len:=y;
318       if x>y then ans:=0
319       else begin
320         x:=find2(1,m,x);
321         y:=find1(1,m,y);
322         ans:=ask(1,p,h[y-1],h[x],len);
323       end;
324       writeln(ans);
325     end;
326   end;
327 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4573454.html

资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡平芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合处理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,包括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡平芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 JavaScript 中实现点击展开与隐藏效果是一种非常实用的交互设计,它能够有效提升用户界面的动态性和用户体验。本文将详细阐述如何通过 JavaScript 实现这种功能,并提供一个完整的代码示例。为了实现这一功能,我们需要掌握基础的 HTML 和 CSS 知识,以便构建基本的页面结构和样式。 在这个示例中,我们有一个按钮和一个提示框(prompt)。默认情况下,提示框是隐藏的。当用户点击按钮时,提示框会显示出来;再次点击按钮时,提示框则会隐藏。以下是 HTML 部分的代码: 接下来是 CSS 部分。我们通过设置提示框的 display 属性为 none 来实现默认隐藏的效果: 最后,我们使用 JavaScript 来处理点击事件。我们利用事件监听机制,监听按钮的点击事件,并通过动态改变提示框的 display 属性来实现展开和隐藏的效果。以下是 JavaScript 部分的代码: 为了进一步增强用户体验,我们还添加了一个关闭按钮(closePrompt),用户可以通过点击该按钮来关闭提示框。以下是关闭按钮的 JavaScript 实现: 通过以上代码,我们就完成了点击展开隐藏效果的实现。这个简单的交互可以通过添加 CSS 动画效果(如渐显渐隐等)来进一步提升用户体验。此外,这个基本原理还可以扩展到其他类似的交互场景,例如折叠面板、下拉菜单等。 总结来说,JavaScript 实现点击展开隐藏效果主要涉及 HTML 元素的布局、CSS 的样式控制以及 JavaScript 的事件处理。通过监听点击事件并动态改变元素的样式,可以实现丰富的交互功能。在实际开发中,可以结合现代前端框架(如 React 或 Vue 等),将这些交互封装成组件,从而提高代码的复用性和维护性。
一、AutoCAD 2016的工作界面 组成要素:由应用程序菜单、标题栏、快速访问工具栏、菜单栏、功能区、命令窗口、绘图窗口和状态栏组成。 1. 切换至AutoCAD 2016 1)工作空间 模式类型:提供草图与注释、三维基础、三维建模三种工作空间模式 二维绘图功能:在草图与注释空间中可使用默认、插入、注释、参数化、视图管理等选项卡进行二维图形绘制 切换方法: 快速访问工具栏→工作空间按钮下拉列表 状态栏→切换工作空间按钮下拉列表 三维功能:三维基础空间包含可视化、坐标、长方体等三维建模工具 2)应用程序菜单 位置:位于界面左上角 核心功能: 搜索命令 文件操作(新建/打开/保存/另存为/输出/发布/打印/关闭) 最近文档管理(可按日期/大小/类型排序) 选项设置(打开选项对话框) 3)标题栏 显示内容:当前程序名称(Autodesk AutoCAD 2016)和文件名称 信息中心功能: 帮助搜索 Autodesk账户登录 软件更新检查 窗口控制(最小化/最大化/关闭) 4)菜单栏 显示设置:通过自定义快速访问工具栏→显示菜单栏选项启用 菜单结构:包含文件、编辑、视图、插入等11个主菜单项 命令示例: 绘图→直线:进入直线绘制模式 绘图→圆弧:提供三点、起点-圆心-端点等11种绘制方式 5)选项卡和面板 组织结构: 选项卡(默认/插入/注释等) 面板(绘图/修改/注释等) 命令按钮(直线/多段线/圆等) 操作流程:单击命令按钮→绘图区操作→Enter键确认 6)工具栏 调用方式:工具→工具栏→AutoCAD→选择所需工具栏 控制方法: 显示:勾选对应工具栏选项 隐藏:取消勾选或点击工具栏关闭按钮 示例操作:绘图工具栏包含直线、构造线等绘图工具按钮 7)绘图窗口 主要功能:核心绘图工作区域 导航控制: 滚动条调整视图 模型/布局空间切换 显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值