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. 2. Unconstrained Optimization

    2.1 Basic Results on the Existence of Optimizers 2.1. Let \(f:U->\mathbb{R}\) be a function on a ...

  2. Jumpserver 一键部署(支持离线安装)

    1.教程介绍1.1::通过本教程起到抛砖引玉效果,希望各位喜爱Jumpserver堡垒机的朋友受益良多. 1.2::以下提供的任何软件仅供学习交流使用. 2.下载链接2.1::centos_1810最 ...

  3. mysql配置白名单

    1. 测试是否允许远程连接 $ telnet 192.168.1.8 3306 host 192.168.1.4 is not allowed to connect to this mysql ser ...

  4. 视觉SLAM算法框架解析(3) SVO

    版权声明:本文为博主原创文章,未经博主允许不得转载. SVO(Semi-direct Visual Odometry)[1]顾名思义是一套视觉里程计(VO)算法.相比于ORB-SLAM,它省去了回环检 ...

  5. labview状态机

    状态机主要由3部分组成,包括一个while循环,一个条件结构,以及while循环的移位寄存器,其中while循环用于保证程序的持续运行,条件结构用于处理不同状态的执行,移位寄存器用于实现从一个状态跳转 ...

  6. Linux安装完后的调优(linux 6)

    1:关闭 SELinux 方法一:  #sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #替换文本参数       ...

  7. STL中map的使用

    知识点 C++中map提供的是一种键值对容器,里面的数据都是成对出现的.map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的. ...

  8. nodejs 模块变量 应用

    exports.allcodeandname=(function(){ var fs = require('fs'); var data = fs.readFileSync(__dirname+'/a ...

  9. Java IO: 字节和字符数组

    原文链接  作者: Jakob Jenkov   译者:homesick 内容列表 从InputStream或者Reader中读入数组 从OutputStream或者Writer中写数组 在java中 ...

  10. 接口测试-chap4-关联接口测试

    关联接口测试指:请求第2个接口之前必须先请求第一个接口 1.请求第2个接口时需要带着第一个请求返回的cookie 2.如果不使用cookie,如何进行关联接口测试:使用session保持连接.可以代替 ...