绳子与重物

原创 2017年08月17日 15:49:27
题目来源: 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;
} 

Unreal Engine 4 —— 可交互绳索的构建

UE4的这个Cable Component是与世界场景没有交互的,因此这篇博客将讲解如何基于该Cable Component来实现绳索与世界的交互。...
  • noahzuo
  • noahzuo
  • 2016年05月01日 17:20
  • 2391

Box2D引擎实现割绳子物理部分的方法

从最热门游戏排行榜和flash游戏网站上,你能看到什么?许多2D游戏都有非常出色的物理学和美术设计。现在我们要学习那些游戏使用了什么物理学以及如何用Box2D制作它们。 除了知道是“什么”,更重要的...
  • zx6733090
  • zx6733090
  • 2014年06月13日 16:56
  • 1368

实例介绍Cocos2d-x物理引擎:使用关节

在游戏中我们可以通过关节约束两个物体的运动。我们通过一个距离关节实例,介绍一下如何在使用关节。这个实例的运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点和附近生成两...
  • tonny_guan
  • tonny_guan
  • 2014年09月30日 20:56
  • 5919

51nod 1307 绳子与重物

比较容易想到的是建图之后,然后二分,nlogn的复杂度,可以通过此题 然后,还有一种做法,需要并查集维护已经dfs过的点的祖先,大概复杂度是alpha(n)(并查集的复杂度),,比On高一点点, ...
  • qq_30927651
  • qq_30927651
  • 2017年03月11日 00:37
  • 131

51nod 1307 绳子与重物 (标记父节点更新即可)

1307 绳子与重物 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为C...
  • zhangjiuding
  • zhangjiuding
  • 2017年10月26日 10:10
  • 49

51nod 1307 绳子与重物【二分+Dfs】

1307 绳子与重物 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1...
  • mengxiang000000
  • mengxiang000000
  • 2016年12月01日 14:09
  • 660

51NOD1307 绳子与重物 【并查集】

1307 绳子与重物 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 ...
  • LuRiCheng
  • LuRiCheng
  • 2017年06月10日 22:26
  • 281

51nod 1307 绳子与重物 二分+dfs

有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为Ci。每条绳子或挂在别的绳子下或直接挂在钩子上(编号-1)。如果绳子下所有重物的重量大于绳子的最大负重就会断掉(...
  • Little_boy_z
  • Little_boy_z
  • 2017年11月15日 21:04
  • 29

51nod1307 绳子与重物

有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为Ci。每条绳子或挂在别的绳子下或直接挂在钩子上(编号-1)。如果绳子下所有重物的重量大于绳子的最大负重就会断掉(...
  • suguoliang
  • suguoliang
  • 2017年08月02日 09:36
  • 76

51nod 1307 绳子与重物【并查集】【搜索】【二分法】

题目大意 思路 思路1 二分DFS 思路2 并查集 代码1 二分DFS Hit题目大意传送门给出 每个绳子的承重Ci 小球的重量Wi 小球挂在那个小球上Pi问最多挂多少个绳子而不会出现绳子断掉的...
  • u010468553
  • u010468553
  • 2017年09月11日 15:07
  • 70
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:绳子与重物
举报原因:
原因补充:

(最多只允许输入30个字)