bzoj2260: 商店购物&&4349: 最小树形图
最小树形图问题啊
最小树形图是撒哩,就是给你一个有向图,确定一个根,要你到达所有点,那棵最短路径树的总边权
做这个用的是朱(jv)刘(lao)算法。
首先假如有多个联通块就无解啦
对应每个点(除了根),找到一条连向它的最短的边,假如没有环,那这个就是答案嘛
否则就找环,然后缩点,对于一个环,假如要从它的一个成员节点x断开,那么答案是减去环上的边,然后加上连进来的边,那么我们就把所有连向x的边的权,减去环上这条边的权(感觉很像数据备份退流的思想)
不断重复直到没有环。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; struct edge{int x,y;double d;}a[];int len;
void ins(int x,int y,double d)
{
len++;
a[len].x=x;a[len].y=y;a[len].d=d;
}
double rch[];int pre[];
int bel[],fr[];
double directed_MST(int n,int rt)
{
double ans=;
while()
{
memset(rch,0x7f,sizeof(rch));
for(int i=;i<=len;i++)
if(a[i].x!=a[i].y&&rch[a[i].y]>a[i].d)
pre[a[i].y]=a[i].x, rch[a[i].y]=a[i].d;
rch[rt]=;
for(int i=;i<=n;i++)
if(rch[i]==0x7f)return -; memset(bel,,sizeof(bel));
memset(fr,,sizeof(fr));
int cnt=;
for(int i=;i<=n;i++)
{
ans+=rch[i];
int k=i;
while(fr[k]!=i&&bel[k]==&&k!=rt) fr[k]=i, k=pre[k];
if(bel[k]==&&k!=rt)
{
cnt++;int t=k;
do
{
bel[k]=cnt;
k=pre[k];
}while(k!=t);
}
}
if(cnt==)return ans; for(int i=;i<=n;i++)
if(bel[i]==)bel[i]=++cnt;
for(int i=;i<=len;i++)
{
if(bel[a[i].x]!=bel[a[i].y])a[i].d-=rch[a[i].y];
a[i].x=bel[a[i].x],a[i].y=bel[a[i].y];
}
n=cnt,rt=bel[rt];
}
} int tp,id[];
int cp[];double cnm[];
int main()
{
int n,m,x,y,pp;double dd;
scanf("%d",&n);tp=;
for(int i=;i<=n;i++)
{
scanf("%lf%d",&dd,&pp);
if(pp>)
{
id[i]=++tp;
cnm[id[i]]=dd;
cp[id[i]]=pp;
}
} n=tp+;len=;
for(int i=;i<n;i++)ins(n,i,cnm[i]);
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%lf",&x,&y,&dd);
if(cp[id[x]]>&&cp[id[y]]>)
{
ins(id[x],id[y],dd);
cnm[id[y]]=min(cnm[id[y]],dd);
}
} double ans=directed_MST(n,n);
for(int i=;i<n;i++)
ans+=(double(cp[i]-))*cnm[i];
printf("%.2lf\n",ans); return ;
}
bzoj2260: 商店购物&&4349: 最小树形图的更多相关文章
- bzoj2260: 商店购物 && 4349: 最小树形图
Description Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火.小店的优惠方案十分简单有趣.Grant规定:在一次消费过程中,如果您在本店购买了精制油 ...
- 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规定:在一次消费过程中,如果您在本店购买了精制油 ...
随机推荐
- Discuze修改用户名长度限制
第一步,在网站 uc_client\model 目录下的 user.php文件中,找到如下代码: ? 1 if($len > 15 || $len < 3 || preg_match(&q ...
- 【PostgreSQL-9.6.3】psql常用命令
命令 描述 \l 查看数据库 \c 换库 \d 查看所有表 \dt 只显示匹配的表 \di 只显示匹配的索引 \ds 只显示匹配的序列 \dv 只显示匹配的视图 \df 只显示匹配的函数 \d t1 ...
- dubbo之本地存根
本地存根 远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做 ThreadLocal 缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在 ...
- SiftGPU:编译SiftGPU出现问题-无法解析的外部符号 glutInit
OpenCV出现了ORB特征和SURF的GPU版本, 参考:opencv上gpu版surf特征点与orb特征点提取及匹配实例至于使用什么并行API暂时没有探究. 但没有发现OpenCV-SIFT的GP ...
- python迭代器,生成器,推导式
可迭代对象 字面意思分析:可以重复的迭代的实实在在的东西. list,dict(keys(),values(),items()),tuple,str,set,range, 文件句柄(待定) 专业角度: ...
- <转>c++引用与指针的区别(着重理解)
★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指 ...
- android studio: 为现有项目添加C++支持
刚开始创建项目的时候并没有勾选“include C++ support” 选项: 后期增加步骤: 1.拷贝已有支持C++项目的CMakeLists.txt文件到现有项目的app目录下: 2.在app/ ...
- Python基础学习(day1)
一.Python几点使用规范: 1.关于引号的使用规范 (1)字符串中含有单引号,则使用双引号外扩 print("It's ok") (2)字符串中含有双引号,则使用单引号外扩 p ...
- Mark Zuckberg: A letter to our daughter
转自: http://www.fastcompany.com/3054120/fast-feed/read-mark-zuckerbergs-letter-to-his-newborn-daugh ...
- Bootstrap 表单控件一(单行输入框input,下拉选择框select ,文本域textarea)
单行输入框,常见的文本输入框,也就是input的type属性值为text.在Bootstrap中使用input时也必须添加type类型,如果没有指定type类型,将无法得到正确的样式,因为Bootst ...