Description

Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火。小店的优惠方案十分简单有趣。Grant规定:在一次消费过程中,如果您在本店购买了精制油的话,您购买香皂时就可以享受2.00元/块的优惠价;如果您在本店购买了香皂的话,您购买可乐时就可以享受1.50元/听的优惠价……诸如此类的优惠方案就是说:如果您在本店购买了商品A的话,您就可以以P元/件的优惠价格购买商品B(购买的数量不限)。有趣的是,你需要购买同样一些商品,由于不同的购买顺序,Grant老板可能会叫你付不同数量的钱。比如你需要一块香皂(原价2.50元)、一瓶精制油(原价10.00元)、一听可乐(原价1.80元),如果你按照可乐,精制油,香皂这样的顺序购买的话,Grant老板会问你要13.80元;而如果你按照精制油,香皂,可乐这样的顺序购买的话,您只需付13.50元。

现在该村的居民请你编写一个程序,告诉你Grant小店商品的原价,所有优惠方案及所需的商品,计算至少需要花多少钱。不允许购买任何不需要的商品,即使这样做可能使花得钱更少。

Input

,第一行为一个整数n(1<=n<=50),表示Grant小店的商品种数。接下来是n行,其中第(i+1)行由一个实数Ci (0<Ci<=1000)和一个整数Mi (0<=Mi<=100)组成,其间由一个空格分隔,分别表示第i种商品的原价和所需数量。第(n+2)行又是一个整数k,表示Grant小店的优惠方案总数。接着k行,每行有二个整数A,B(1<=A,B<=n)和一个实数P( 0<=P<1000),表示一种优惠方案,即如果您购买了商品A,您就可以以P元/件的优惠价格购买商品B,P小于商品B的原价。所有优惠方案的(A,B)都是不同的。为了方便,Grant不收分币,所以所有价格都不会出现分。

Output

只有一个实数,表示最少需要花多少钱。输出实数须保留两位小数。

Sample Input

4

10.00 1

1.80 1

3.00 0

2.50 2

2

1 4 2.00

4 2 1.50

Sample Output

15.50

Solution

这不是双倍经验?!

【刷题】BZOJ 4349 最小树形图一模一样

  1. #include<bits/stdc++.h>
  2. #define ui unsigned int
  3. #define ll long long
  4. #define db double
  5. #define ld long double
  6. #define ull unsigned long long
  7. const int MAXN=50+5,MAXM=MAXN*MAXN;
  8. const db inf=100000000000.00;
  9. int n,m,times[MAXN],vis[MAXN],bel[MAXN],snt,s,pre[MAXN],nd,M[MAXN];
  10. db in[MAXN],G[MAXN][MAXN],ans;
  11. struct node{
  12. int u,v;
  13. db k;
  14. };
  15. node side[MAXM];
  16. template<typename T> inline void read(T &x)
  17. {
  18. T data=0,w=1;
  19. char ch=0;
  20. while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
  21. if(ch=='-')w=-1,ch=getchar();
  22. while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
  23. x=data*w;
  24. }
  25. template<typename T> inline void write(T x,char ch='\0')
  26. {
  27. if(x<0)putchar('-'),x=-x;
  28. if(x>9)write(x/10);
  29. putchar(x%10+'0');
  30. if(ch!='\0')putchar(ch);
  31. }
  32. template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
  33. template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
  34. template<typename T> inline T min(T x,T y){return x<y?x:y;}
  35. template<typename T> inline T max(T x,T y){return x>y?x:y;}
  36. inline db solve(int rt,int n)
  37. {
  38. db res=0;
  39. while(true)
  40. {
  41. for(register int i=1;i<=n;++i)in[i]=inf;
  42. for(register int i=1;i<=snt;++i)
  43. if(side[i].u!=side[i].v&&in[side[i].v]>side[i].k)in[side[i].v]=side[i].k,pre[side[i].v]=side[i].u;
  44. for(register int i=1;i<=n;++i)
  45. if(i!=rt&&in[i]==inf)return -1;
  46. int cnt=0;
  47. memset(bel,0,sizeof(bel));
  48. memset(vis,0,sizeof(vis));
  49. in[rt]=0;
  50. for(register int i=1,j;i<=n;++i)
  51. {
  52. res+=in[i];j=i;
  53. while(j!=rt&&vis[j]!=i&&!bel[j])vis[j]=i,j=pre[j];
  54. if(j!=rt&&!bel[j])
  55. {
  56. bel[j]=++cnt;
  57. for(register int k=pre[j];k!=j;k=pre[k])bel[k]=cnt;
  58. }
  59. }
  60. if(!cnt)break;
  61. for(register int i=1;i<=n;++i)
  62. if(!bel[i])bel[i]=++cnt;
  63. for(register int i=1,u,v;i<=snt;++i)
  64. {
  65. u=side[i].u,v=side[i].v;
  66. side[i].u=bel[u];side[i].v=bel[v];
  67. if(bel[u]^bel[v])side[i].k-=in[v];
  68. }
  69. n=cnt;
  70. rt=bel[rt];
  71. }
  72. return res;
  73. }
  74. int main()
  75. {
  76. read(n);
  77. s=++nd;
  78. for(register int i=1;i<=n;++i)
  79. {
  80. in[i]=inf;
  81. db cost;scanf("%lf",&cost);read(times[i]);
  82. if(times[i])
  83. {
  84. M[i]=++nd;
  85. side[++snt]=(node){s,M[i],cost};
  86. chkmin(in[i],cost);
  87. }
  88. }
  89. read(m);
  90. for(register int i=1;i<=m;++i)
  91. {
  92. int x,y;read(x);read(y);
  93. db cost;scanf("%lf",&cost);
  94. if(M[x]&&M[y])
  95. {
  96. side[++snt]=(node){M[x],M[y],cost};
  97. chkmin(in[y],cost);
  98. }
  99. }
  100. for(register int i=1;i<=n;++i)
  101. if(times[i]>1)ans+=(times[i]-1)*in[i];
  102. printf("%.2f\n",ans+solve(s,nd));
  103. return 0;
  104. }

【刷题】BZOJ 2260 商店购物的更多相关文章

  1. BZOJ 2260 商店购物(最小树形图)

    不会最小树形图的出门左转 其实如果确定每种商品第一件的购买顺序,那么剩下的商品肯定是以最优惠价格购买的. 如何确定各种商品第一件购买时的最小价值呢? 考虑如果购买了\(a_i\)这种商品,那么就能以\ ...

  2. 【Bzoj2260】【Bzoj4349】商店购物 & 最小树形图

    目录 List Bzoj 2260 商店购物 Description Input Output Sample Input Sample Output Bzoj 4349 最小树形图 Descripti ...

  3. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  4. 【刷题】BZOJ 2407 探险

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

  5. 【刷题】BZOJ 4543 [POI2014]Hotel加强版

    Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...

  6. 【刷题】BZOJ 4316 小C的独立集

    Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使 ...

  7. 【刷题】BZOJ 4176 Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

  8. 【刷题】BZOJ 4566 [Haoi2016]找相同字符

    Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别为 ...

  9. 【刷题】BZOJ 3365 [Usaco2004 Feb]Distance Statistics 路程统计

    Description 在得知了自己农场的完整地图后(地图形式如前三题所述),约翰又有了新的问题.他提供 一个整数K(1≤K≤109),希望你输出有多少对农场之间的距离是不超过K的. Input 第1 ...

随机推荐

  1. kali2.0下JAVA安装

    参考网址:http://www.blackmoreops.com/2013/10/26/how-to-install-java-jdk-in-kali-linux/ 1.下载javase,http:/ ...

  2. python的rtree包缺失libspatiaindex.so

    1 准备autoconf工具 yum -y install autoconf automake libtool 2 准备g++编译器 yum -y install gcc gcc-c++ 3 下载并安 ...

  3. 我们一起学习WCF 第七篇会话模式

    会话:就是客户端和服务端之间的谈话.比喻A和B去登陆网站,那么A用户登陆进去肯定显示A的用户详情,那么这就是A和服务器之间的交流.同样B用户登陆之后显示B的详情,这就表示这是B和服务器之间的交流. 如 ...

  4. C#匿名参数(转载too)

    匿名方法是在初始化委托时内联声明的方法. 例如下面这两个例子: 不使用匿名方法的委托: using System; using System.Collections.Generic; using Sy ...

  5. 本周实验PSP0 过程文档

    2016-03-12 项目总结: 日期\学习时间 听课 编写程序 阅读相关书籍 日总计 周一 110 0 30 140 周二 0 30 30 60 周三 0 40 0 40 周四 110 20 30 ...

  6. C/C++学习计划

    学习内容:C语言程序设计精髓/计算机程序设计(C++) 学习理由:基础比较薄弱,想先打好基础. 时间安排:每天学习两课时. mooc地址:http://www.icourse163.org/home. ...

  7. DP--HDU 1003(最大子串和)

    问题描述:          给定整数A1, A2,--AN (可能有负数),求I到j的最大值. 例如:          -2, 11, -4, 13, -5, -2时答案为20 对于这个问题的算法 ...

  8. DP----入门的一些题目(POJ1088 POJ1163 POJ1050)

    动态规划入门 DP 基本思想 具体实现 经典题目 POJ1088 POJ1163 POJ1050 (一) POJ1088,动态规划的入门级题目.嘿嘿,连题目描述都是难得一见的中文. 题目分析: 求最长 ...

  9. 周总结<6>

    周次 学习时间 新编写代码行数 博客量(篇) 学到知识点 13 10 100 2 网页设计:邻接矩阵深度以及广度遍历

  10. C++ Primer Plus学习:第一章

    C++入门第一章:预备知识 C++简介 C++融合了三种不同的编程方式: C语言代表的过程性语言. C++在C语言基础上添加的类代表的面向对象语言. C++模板支持的泛型编程. C++简史 20世纪7 ...