bzoj2260: 商店购物 && 4349: 最小树形图
Description
Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火。小店的优惠方案十分简单有趣。Grant规定:在一次消费过程中,如果您在本店购买了精制油的话,您购买香皂时就可以享受2.00元/块的优惠价;如果您在本店购买了香皂的话,您购买可乐时就可以享受1.50元/听的优惠价……诸如此类的优惠方案就是说:如果您在本店购买了商品A的话,您就可以以P元/件的优惠价格购买商品B(购买的数量不限)。有趣的是,你需要购买同样一些商品,由于不同的购买顺序,Grant老板可能会叫你付不同数量的钱。比如你需要一块香皂(原价2.50元)、一瓶精制油(原价10.00元)、一听可乐(原价1.80元),如果你按照可乐,精制油,香皂这样的顺序购买的话,Grant老板会问你要13.80元;而如果你按照精制油,香皂,可乐这样的顺序购买的话,您只需付13.50元。
现在该村的居民请你编写一个程序,告诉你Grant小店商品的原价,所有优惠方案及所需的商品,计算至少需要花多少钱。不允许购买任何不需要的商品,即使这样做可能使花得钱更少。
Input
Output
只有一个实数,表示最少需要花多少钱。输出实数须保留两位小数。
Sample Input
10.00 1
1.80 1
3.00 0
2.50 2
2
1 4 2.00
4 2 1.50
Sample Output
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 105
#define maxm 5105
using namespace std;
int n,m,a,b,tim[maxn],sum[maxn],flag[maxn];
double c,ans;
int tmp,best[maxn],bel[maxn],idx,vis[maxn];
struct Graph{
int tot,now[maxn],fa[maxm],son[maxm],pre[maxm];
double val[maxm];
void init(){tot=;memset(now,,sizeof(now));}
void put(int a,int b,double c){pre[++tot]=now[a],now[a]=tot,son[tot]=b,val[tot]=c,fa[tot]=a;}
void prepare(){
for (int u=;u<=n;u++) if (!flag[u])
for (int p=now[u],v=son[p];p;p=pre[p],v=son[p])
if (best[v]==-||val[best[v]]>val[p]) best[v]=p;
memset(vis,-,sizeof(vis));
tmp=n,vis[]=;
for (int i=;i<=n;i++) if (!flag[i]&&vis[i]==-){
int u,v; ++idx;
for (u=i;vis[u]==-;u=fa[best[u]]) vis[u]=idx;
if (vis[u]<idx) continue;
v=u,bel[u]=++tmp,vis[v]=;
for (v=fa[best[v]];vis[v]==idx;v=fa[best[v]]) vis[v]=,bel[v]=tmp;
}
}
}G[];
void work(){
for (int t=;;t^=){
for (int i=;i<=n;i++) best[i]=-;
G[t].prepare(),G[t^].init();
if (tmp==n){
for (int i=;i<=n;i++) if (!flag[i]) ans+=G[t].val[best[i]];
break;
}
for (int u=;u<=n;u++) if (!flag[u]){
for (int p=G[t].now[u],v=G[t].son[p];p;p=G[t].pre[p],v=G[t].son[p]){
if (bel[u]&&bel[v]&&bel[u]==bel[v]) continue;
int a;
if (bel[u]) a=bel[u]; else a=u;
if (bel[v]) G[t^].put(a,bel[v],G[t].val[p]-G[t].val[best[v]]);
else G[t^].put(a,v,G[t].val[p]);
}
if (bel[u]) ans+=G[t].val[best[u]],flag[u]=;
}
n=tmp;
}
printf("%.2lf\n",ans);
}
double low[maxn];
int main(){
scanf("%d",&n);
for (int i=;i<=n;i++){
scanf("%lf%d",&c,&tim[i]);
if (tim[i]) G[].put(,i,c),low[i]=c; else flag[i]=;
}
scanf("%d",&m);
for (int i=;i<=m;i++){
scanf("%d%d%lf",&a,&b,&c);
if (flag[a]||flag[b]) continue;
low[b]=min(low[b],c);
G[].put(a,b,c);
}
for (int i=;i<=n;i++) if (!flag[i]) ans+=low[i]*(tim[i]-);
work();
return ;
}
bzoj2260: 商店购物 && 4349: 最小树形图的更多相关文章
- bzoj2260: 商店购物&&4349: 最小树形图
最小树形图问题啊 最小树形图是撒哩,就是给你一个有向图,确定一个根,要你到达所有点,那棵最短路径树的总边权 做这个用的是朱(jv)刘(lao)算法. 首先假如有多个联通块就无解啦 对应每个点(除了根) ...
- BZOJ 2260 商店购物(最小树形图)
不会最小树形图的出门左转 其实如果确定每种商品第一件的购买顺序,那么剩下的商品肯定是以最优惠价格购买的. 如何确定各种商品第一件购买时的最小价值呢? 考虑如果购买了\(a_i\)这种商品,那么就能以\ ...
- 【BZOJ】4349: 最小树形图
题解 我们只考虑给每个点买一个,之后每个点就可以用最低价格买了 根据最小树形图的算法,就是不断给每个点入度的边找一条最小的 如果构成了树形图就退出,否则把形成了环的点缩成一个点,加上环的权值,然后把指 ...
- 【刷题】BZOJ 4349 最小树形图
Description 小C现在正要攻打科学馆腹地------计算机第三机房.而信息组的同学们已经建好了一座座堡垒,准备迎战.小C作为一种高度智慧的可怕生物,早已对同学们的信息了如指掌. 攻打每一个人 ...
- [JSOI2008]小店购物 & bzoj4349:最小树形图 最小树形图
---题面(洛谷)--- ---题面(bzoj)--- 其实是同一道题,,,样例都一模一样 题解: 一开始看想了好久,,,还想到了最短路和最小生成树,,然而写的时候才意识到最小生成树应该要用无向边 其 ...
- bzoj4349: 最小树形图&&bzoj2260: 商店购物
双倍经验大法吼 昨天发现不会最小属性图&朱刘算法啊 吓得我赶紧补了一发 朱刘算法模板题 #include <iostream> #include <cstdio> #i ...
- bzoj 4349 最小树形图——朱刘算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4349. 学习博客:http://www.cnblogs.com/xzxl/p/7243466 ...
- 【Bzoj2260】【Bzoj4349】商店购物 & 最小树形图
目录 List Bzoj 2260 商店购物 Description Input Output Sample Input Sample Output Bzoj 4349 最小树形图 Descripti ...
- 【刷题】BZOJ 2260 商店购物
Description Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火.小店的优惠方案十分简单有趣.Grant规定:在一次消费过程中,如果您在本店购买了精制油 ...
随机推荐
- 324. Wiggle Sort II
这个题真是做得我想打人了.我生起气来连自己都打. 一开始quick select没啥可说的.但是in place把老命拼了都没想出来.. 看网上的答案是3 partition,MAP式子一看就由衷地反 ...
- 通过代码来执行testng.xml
大多数时候,我们都是通过Eclipse IDE上的操作命令来执行testng 框架下的case 运行.那如果我们不想通过这种方式,而是想通过代码调用来实现执行该怎么办?下面是我搜集的两种方式供大家参考 ...
- Java中如何使用Redis做缓存
基本功能测试 1.程序基本结构 2.主要类 1)功能类 package com.redis; import java.util.ArrayList; import java.util.Iterator ...
- 关于在VMware上装lFEDORA系统
VMware虚拟机启动当中某个操作系统的时候,会出现如下提示 Cannot connect virtual device floppy0. No corresponding device is ava ...
- C#截取指定字符串函数
本文转载:http://www.cnblogs.com/liufei88866/archive/2012/05/12/2497395.html 一.通过函数方式进行获取. public string ...
- [Javascript] An Introduction to JSPM (JavaScript Package Manager)
JSPM can handle installed packages, transpiling ES6, and bundling all from the command-line. This vi ...
- android 56
##其他布局 * LinearLayout * RelativeLayout * FrameLayout * AbsoluteLayout (绝对布局, 文档说过时,应用场景机顶盒开发,定制的平板) ...
- 《Linux内核分析》-----张超
http://www.cnblogs.com/zhangchao0515/category/797954.html MOOC课程 http://mooc.study.163.com/course/US ...
- WebLogic: The Definitive Guide examined WebLogic's security mechanisms--reference
reference from: http://www.onjava.com/pub/a/onjava/excerpt/weblogic_chap17/index1.html?page=1 ...... ...
- 9.23 noip模拟试题
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...