SOJ 4583 动态规划之分组背包
Description
Sidney想去Gandtom家玩。但Sidney家和Gandtom家之间是高低不平、坑坑洼洼的土路。所以他需要用他的背包装几袋稀的泥,在路上铺平一些干的土,使路变成平整的泥土,才能到Gandtom家见到Gandtom。
已知现在有袋稀的泥,第袋稀的泥的质量为。初始时,第个分组只有第袋稀的泥。接下来Sidney每一次会把质量最小(如果质量相同取编号小的)的两组稀的泥合并成一组。新的分组的质量为原来两分组质量的和,编号为原来两组稀的泥的编号的较小者的编号。
试求Sidney经过次操作后,第袋稀的泥在第几组中。
Input
第一行有一个整数,表示组数。
每组数据第一行有两个正整数, ,。表示稀的泥的袋数与询问的次数。
每组数据第二行有个正整数,第个代表。
接下来有行,每行有两个非负整数,
题目保证。
Output
每组数据输出行。
第行表示Sidney经过次操作后,第袋稀的泥在第几组中。
Sample Input
1
5 7
1 2 3 4 5
1 2
2 1
2 2
2 3
2 4
3 5
4 5
Sample Output
1
1
1
1
4
4
1
Note
第一次操作后。第1、2袋稀的泥在第1组中,第3袋稀的泥在第3组中,第4袋稀的泥在第4组中,第5袋稀的泥在第5组中。
第二次操作后。第1、2、3袋稀的泥在第1组中,第4袋稀的泥在第4组中,第5袋稀的泥在第5组中。
第三次操作后。第1、2、3袋稀的泥在第1组中,第4、5袋稀的泥在第4组中。
第四次操作后。第1、2、3、4、5袋稀的泥在第1组中。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int N=1e6+;
typedef pair <int,int> P; int F[N],w[N];
int getf(int x)
{
if(x==F[x])
return x;
return F[x]=getf(F[x]);
}
int main(){
int i,T,n,m,t,q;
scanf("%d",&T);
priority_queue<P, vector<P>, greater<P> > Q;
while(T--)
{
while(!Q.empty())
Q.pop();
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)
{
scanf("%d",&w[i]);
F[i]=i;
Q.push(P(w[i],i));
}
int now=;
for(i=;i<=m;i++)
{
scanf("%d%d",&t,&q);
for(now;now<t;now++)
{
P s1=Q.top();
Q.pop();
P s2=Q.top();
Q.pop();
P s3=P(s1.first+s2.first,min(s1.second,s2.second));
Q.push(s3);
int p1=getf(s1.second);
int p2=getf(s2.second);
if(p1<p2)
F[p2]=p1;
else
F[p1]=p2;
}
printf("%d\n",getf(q));
}
}
return ;
}
SOJ 4583 动态规划之分组背包的更多相关文章
- B - ACboy needs your help(动态规划,分组背包)
B - ACboy needs your help Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- ***C - I love sneakers!(动态规划,分组背包)
C - I love sneakers! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- SOJ 4580 动态规划之01背包 (01背包)
Description Sidney想去Gandtom家玩.但Sidney家和Gandtom家之间是高低不平.坑坑洼洼的土路.所以他需要用他的背包装几袋稀的泥,在路上铺平一些干的土,使路变成平整的泥土 ...
- CJOJ 2040 【一本通】分组背包(动态规划)
CJOJ 2040 [一本通]分组背包(动态规划) Description 一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2, ...
- Codeforces 946 D.Timetable-数据处理+动态规划(分组背包) 处理炸裂
花了两个晚上来搞这道题. 第一个晚上想思路和写代码,第二个晚上调试. 然而还是菜,一直调不对,我的队友是Debug小能手呀(真的是无敌,哈哈,两个人一会就改好了) D. Timetable tim ...
- BZOJ1296 [SCOI2009]粉刷匠 动态规划 分组背包
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1296 题意概括 有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝 ...
- 洛谷 P1273 有线电视网 && caioj 1109 树形动态规划(TreeDP)4:比赛转播(树上分组背包总结)
从这篇博客往前到二叉苹果树都可以用分组背包做 这依赖性的问题,都可以用于这道题类似的方法来做 表示以i为根的树中取j个节点所能得的最大价值 那么每一个子树可以看成一个组,每个组里面取一个节点,两个节点 ...
- 洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- 树形DP+(分组背包||二叉树,一般树,森林之间的转换)codevs 1378 选课
codevs 1378 选课 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 学校实行学分制.每门的必修课都有固定的学分 ...
随机推荐
- 打造自己的LinQProvider(四)
打造自己的LinqProvider *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- C# 进程间共享内存通信方式
从别处看到一篇文章做进程间通信很好使,唯一的问题是,需要注意using的用法,Using有个用法3, using 语句允许程序员指定使用资源的对象应当何时释放资源.using 语句中使用的对象必须实现 ...
- 如何在HTML 5中拖动光标图标?
window.app = { dragging: false, config: { canDrag: false, cursorOffsetX: null, cursorOffsetY: null } ...
- IDEA下的第一个springBoot
1.第一步打开File->New->Project,SDK根据自己的需要选择,我这边选的是java7 2.Next之后 设置group 和artifact,根据自己的需要进行修改. 3.导 ...
- STL:vector<bool> 和bitset
今天某个地方要用到很多位标记于是想着可以用下bitset,不过发现居然是编译时确定空间的,不能动态分配.那就只能用vector来代替一下了,不过发现居然有vector<bool>这个特化模 ...
- android调试debug快捷键
1. [Ctrl+Shift+B]:在当前行设置断点或取消设置的断点. 2. [F11]:调试最后一次执行的程序. 3. [Ctrl+F11]:运行最后一次执行的程序. 4. ...
- C# 获取客户端信息 /asp.net/WebService/WebForm
Request.Browser.MajorVersion.ToString();//获取客户端浏览器的(主)版本号Request.Browser.Version.ToString(); //获取客 ...
- FastDFS部署安装全过程
你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:https://pushy.site/posts/153205 ...
- Python Socket实现简单web服务器
#!/usr/bin/python env # coding:utf-8 import socket ip_port = ('127.0.0.1', 80) back_log = 10 buffer_ ...
- jquery刷新页面的实现代码(局部及全页面刷新)
局部刷新: 这个方法就多了去了,常见的有以下几种: $.get方法,$.post方法,$.getJson方法,$.ajax方法如下 前两种使用方法基本上一样 下面介绍全页面刷新方法:有时候可能会用到 ...