NOIP 2018模拟赛(带权并查集) 2018 11 3 B组 Day1 T3

3. 压强(pascal.c/pascal.cpp/pascal.pas)

【题目背景】

std是一个热爱物理的乖孩子~

这天,他看到了一架时光机,但是他发现有一个人堵在门口······

【题目描述】

这个人告诉std:

“你的面前会出现一堆积木(可以视作均匀的立方体),而你的任务就是统计这堆积木中的某块积木上表面所受的压强。如果你每次都答对了,我就让你上时光机。”

“我会随时把两摞积木并成一摞。”他补充了一句。

刚开始,std感到这个任务似乎很轻松,然而,他渐渐发现,那个人的动作和询问越来越快,std感到一阵阵眩晕。

终于,气喘吁吁的std瘫倒在地上,失去了知觉······

【输入输出格式】

【输入格式】

输入的第1行是两个整数n,q。

第2行~第n+1行是两个实数,分别为第i块积木的棱长li、密度ρi(单位分别为m,*103 kg/m3(即g/cm3))。

第n+2行~第n+q+1行是一个整数opt:

如果opt=1:接下来有一个整数x,请输出此时积木x的上表面所受的压强(设g=9.8m/s2)。

如果opt=2:接下来有两个整数x,y,请将x所在的积木摞整体移动(即不改变积木上下的顺序)到y所在的积木摞上方。假设不会有积木摞因为不平衡而倒下(或者说,任意两块叠在一起的积木的顶面中心和底面中心相互对齐)。

【输出格式】

对每个opt=1,输出一个实数,表示压强(单位:pa)。

格式为a.b*10^c pa

其中,a.b为[1,10)内的3位小数,c为一个非负整数。(即科学计数法,同时保证答案大于1或者等于0)

当答案为0时请输出0.000*10^0 pa。

【输入输出样例】

【输入#1】

3 5

1.000 0.500

2.000 0.500

3.000 0.500

1 2

2 1 2

1 2

2 3 1

1 1

【输出#1】

0.000*10^0 pa

4.900*10^3 pa

1.323*10^5 pa

【提示】

本题共30组测试数据,前20组每组3分,后10组每组4分。

对于前12%的数据,1<=n<=100,1<=q<=100。

对于前21%的数据,1<=n<=1000,1<=q<=1000。

对于前30%的数据,1<=n<=10000,1<=q<=10000。

对于前39%的数据,1<=n<=10000,1<=q<=100000。

对于前51%的数据,1<=n<=100000,1<=q<=100000。

对于前64%的数据,1<=n<=150000,1<=q<=150000。

对于前72%的数据,1<=n<=500000,1<=q<=500000。

对于前84%的数据,1<=n<=800000,1<=q<=800000。

对于前88%的数据,1<=n<=900000,1<=q<=900000。

对于100%的数据,1<=n<=1000000,1<=q<=1000000,0.1<= li<=100,0.1<=ρi<=35。

另有10%的数据,所有积木块的棱长相等。

 

算法:带权并查集

难度:<<NOIP Day 1 T3 (虽然说考试的时候,由于本蒟蒻策略失误,没有A)

题解:我们记录权值为上面所压的所有方块的重,然后在路径压缩,回溯的时候更新权值就行了

时间复杂度:O(n)

代码:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值