1154. 【GDOI2003】购物 (Standard IO)

Time Limits: 1000 ms Memory Limits: 65536 KB

Description

  GDOI商场推出优惠活动,以超低价出售若干种商品。但是,商场为避免过分亏本,规定某些商品不能同时购买,而且每种超低价商品只能买一件。身为顾客的你想获得最大的实惠,也就是争取节省最多的钱。经过仔细研究,发现商场出售的超低价商品中,不存在以下情况:   n(n>=3)种商品C1,C2,…..,Cn,其中Ci,Ci+1是不能同时购买的(i=1,2…,n-1)并且C1, Cn也不能同时购买。   编程计算可以节省的最大金额数。

Input

  第一行两个整数K,M(1<=K<=1000).其中K表示超低价商品数。K种商品的编号依次为1,2,…,K。M表示不能同时购买的商品对数.接下来K行,第i行有一个整数Xi表示购买编号为i的商品可以节省的金额(1<=Xi<=100).再接下来M行,每行两个数A ,B,表示A和B不能同时购买,1<=A<=K,1<=B<=K,A<>B

Output

  仅一个整数,表示能节省的最大金额数。

Sample Input

3 1 1 1 1 1 2

Sample Output

2

Data Constraint

题解

把所有商品当成点,分两部分看

  1. 没有任何限制的点
  2. 有限制的点,相互限制的点连一条边

很明显,第一部分的点是一定要取的

而第二部分则构成了一棵树(因为没有环),这部分的点有两种解法

  1. 树形dp

    用f[i][0]表示不取第i个点

    用f[i][1]表示取第i个点

    转移就是老爸取了儿子不能取,儿子取了老爸不能取

  2. 二分图

    最优匹配问题,也可以转化为最小割

    求出来的最优匹配或最小割为ans

    则答案是n-ans/2

代码

树形dp

#include<cstdio>
#include<algorithm>
#define N 1001
using namespace std; long map[N][N],father[N],lc[N],rb[N],ch[N];
long f[N][2]; void build(long now)
{ long i,next;
for(i=1;i<=map[now][0];i++)if(map[now][i]!=father[now]){
if(!lc[now])lc[now]=map[now][i];
else rb[next]=map[now][i];
father[map[now][i]]=now;
next=map[now][i];
ch[now]++;
build(next);
}
}
void suan(long now)
{ long q;
ch[father[now]]--;
if(!lc[now])
f[now][0]=0;
else for(q=lc[now];q;q=rb[q]){
f[now][0]+=max(f[q][0],f[q][1]);
f[now][1]+=f[q][0];
}
} int main()
{ long n,m,i,j,x,y,ans=0;
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;i++)
scanf("%ld",&f[i][1]);
for(i=1;i<=m;i++){
scanf("%ld%ld",&x,&y);
map[x][++map[x][0]]=y;
map[y][++map[y][0]]=x;
}
for(i=1;i<=n;i++)
if(map[i][0]&&!father[i])
build(i);
for(i=1;i<=n;i++)if(!ch[i]){
suan(i);
for(j=father[i];!ch[j]&&j;j=father[j])
suan(j);
}
for(i=1;i<=n;i++)
if(!father[i])ans+=max(f[i][0],f[i][1]);
printf("%ld\n",ans);
return 0;
}

JZOJ 1154. 【GDOI2003】购物的更多相关文章

  1. JZOJ 5461. 【NOIP2017提高A组冲刺11.8】购物

    5461. [NOIP2017提高A组冲刺11.8]购物 (File IO): input:shopping.in output:shopping.out Time Limits: 1000 ms   ...

  2. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  3. JZOJ 5459 购物

    Description X 城的商场中,有着琳琅满目的各种商品.一日,小X 带着小Y 前来购物,小Y 一共看中了n件商品,每一件商品价格为Pi.小X 现在手中共有m个单位的现金,以及k 张优惠券.小X ...

  4. 【原】彻底解决WPS弹出热点广告、WPS购物图标的办法

    一直用WPS,但一直有一个问题迟迟没有解决,那就是讨厌的WPS广告问题! 每次开机都会自动在托盘上闪烁图标:“WPS购物”和“WPS热点”! 用自定义托盘图标隐藏都不管用,自动又会给改回来!这简直是流 ...

  5. Java Web之网上购物系统(提交订单、查看我的订单)

    作业终于做完了,好开心......虽然这一周经历不是那么顺利,但是觉得还是收获了不少,有过想哭的冲动,代码不会写,事情办不好,各种发愁.空间里发小发了带父母出去游玩的照片,瞬间能量值不知道是被击退的多 ...

  6. Java Web之网上购物系统(注册、登录、浏览商品、添加购物车)

    眼看就要期末了,我的专业课也迎来了第二次的期末作业---------<网上购物系统>.虽然老师的意图是在锻炼我们后台的能力,但是想着还是不利用网上的模板,准备自己写,以来别人写的静态页看不 ...

  7. 第八章 交互技术,8.1 VR电商购物(作者:宋五)

    8.1 VR电商购物 前言 GM LAB在2016年3月成立,是一个旨在探索最新电商购物体验的实验室.在探索VR购物的过程中,有两个需要核心解决的问题:一个是VR购物的产品形态是什么,另一个是VR环境 ...

  8. 模拟淘宝购物,运用cookie,记录登录账号信息,并且记住购物车内所选的商品

    1.登录界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

  9. C算法编程题(七)购物

    前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...

随机推荐

  1. python、anaconda、jupyter notebook、pycharm、spyder

    说明: 1.anaconda把任何东西都当做包来管理. 2.anaconda本省集成了python和conda.spyder.numpy等. 3.pip只用于python,conda可用于多种语言. ...

  2. 前端之css引入方式/长度及颜色单位/常用样式

    1.css三种引入方式 <!DOCTYPE html><html><head> <meta charset="UTF-8"> < ...

  3. 自定义servlet重写doGet或doPost方法是如何实现多态的

    我们知道,如果我们自定义一个servlet继承HttpServlet,并且重写HttpServlet中的doGet或doPost方法,那么从浏览器发送过来的request请求将调用HttpServle ...

  4. mysql5.7解压版安装

    环境:win 10 1.解压 新建my.ini [mysqld] port = 3306 basedir=解压路径 datadir=解压路径\data max_connections=200 char ...

  5. 统一管理jar包版本

    <!-- 统一管理jar包版本 --> <properties> <spring.version>5.0.2.RELEASE</spring.version& ...

  6. The Process class relies on proc_open, which is not available on your PHP installation报错解决

    同事laravel框架开发的代码有如下错误日志 production.ERROR: The Process class relies on proc_open, which is not availa ...

  7. Network Saboteur (DFS)

    题目: A university network is composed of N computers. System administrators gathered information on t ...

  8. 码海拾遗:基于MySQL Connector/C++的MySQL操作(连接池)

    1.MySQL安装及简单设置 (1)安装:在OSX系统下,可以使用万能的“brew install”命令来进行安装:brew isntall mysql(默认安装最新版的MySQL) (2)启动:br ...

  9. elasicsearch数据自动清理脚本

    elasticsearch随着保存的数据越来越多,磁盘占用越来越大,有必要进行定期自动清理. 直接上脚本 cat es-index-clear.sh #/bin/bash #查看索引信息 #curl ...

  10. 15.uboot study 串口初始化

    3. 串口初始化 4. 代码实现 关于串口 对于嵌入式设备的开发,刚开始好多设备都无法使用,由于无法获得程序的运行状态,调试程序需要花费好多时间和精力,因此串口对于嵌入式程序的调试的作用显而易见,当串 ...