绳子与重物

题目来源:  Codility
基准时间限制:1 秒 空间限制:131072 KB 分值: 40  难度:4级算法题
 收藏
 关注
有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为Ci。每条绳子或挂在别的绳子下或直接挂在钩子上(编号-1)。如果绳子下所有重物的重量大于绳子的最大负重就会断掉(等于不会断)。依次给出每条绳子的负重Ci、重物的重量Wi以及绳子会挂在之前的哪条绳子的下面,问最多挂多少个绳子而不会出现绳子断掉的情况。

例如下图:

5, 2, -1
3, 3, 0
6, 1, -1
3, 1, 0
3, 2, 3



挂到第4个时会有绳子断掉,所以输出3。


Input
第1行:1个数N,表示绳子的数量(1 <= N <= 50000)。
第2 - N + 1行:每行3个数,Ci, Wi, Pi,Ci表示最大负重,Wi表示重物的重量,Pi表示挂在哪个绳子上,如果直接挂在钩子上则Pi = -1(1 <= Ci <= 10^9,1 <= Wi <= 10^9,-1 <= Pi <= N - 2)。
Output
输出1个数,最多挂到第几个绳子,不会出现绳子断掉的情况。
Input示例
5
5 2 -1
3 3 0
6 1 -1
3 1 0
3 2 3
Output示例

3

李陶冶  (题目提供者)
关于这题,网上有很多二分 +dfs的思想,这个应该一看就有了吧,所以这里就不多展开了,代码量相对长,不过比较好理解,今天我们讲的是这题的另一种解法,首先,我们看到绳子连来连去,很容易想到并查集,然而并查集在输入过程中一句一句判断显然是难以实现的,于是我们变写出了离线的做法,代码如下,比较好理解(虽然本蒟蒻也是看网上神犇的思想打出来的)

#include
    
     
#define N 100000
using namespace std;
struct node{
	int w,p,c,sum;
}x[N];
int f[N*6];
int find(int k){
	if (k==f[k]) return f[k];
	else{
		f[k]=find(f[k]);
		return f[k];
	}
}
int main(){
	int n,i;
	scanf("%d",&n);
	for (i=1;i<=n;i++){
		scanf("%d%d%d",&x[i].c,&x[i].w,&x[i].p);
		x[i].p++;
		x[i].sum=x[i].w;
		f[i]=i;
	}
	long long ans=n;
	for (int i=n;i>=1;i--){
		while (x[i].sum>x[i].c){
			int k=find(ans);
			x[k].sum-=x[ans].w;
			ans--;
		}
		x[x[i].p].sum+=x[i].sum;
		f[i]=x[i].p;
	}
	printf("%I64d\n",ans);
	return 0;
} 
    

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值