bzoj4349: 最小树形图&&bzoj2260: 商店购物
双倍经验大法吼
昨天发现不会最小属性图&朱刘算法啊
吓得我赶紧补了一发
朱刘算法模板题
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define N 55
#define M 2505 using namespace std;
struct edge{
int from,adj,next;double len;
edge(){}
edge(int _from,int _adj,int _next,double _len):from(_from),adj(_adj),next(_next),len(_len){}
} e[M];
int n,g[N],m;
void AddEdge(int u,int v,double w){
e[++m]=edge(u,v,g[u],w);g[u]=m;
} double in[N];
int prep[N];
int vis[N],stamp;
int bl[N],cnt;
double directed_MST(){
double ret=0;
e[0].adj=0;
for (;;){
memset(in,127,sizeof(in));
memset(prep,0,sizeof(prep));
for (int u=1;u<=n;++u)
for (int i=g[u];i;i=e[i].next)
if (e[i].len<in[e[i].adj])
in[e[i].adj]=e[i].len,prep[e[i].adj]=u;
for (int i=1;i<=n;++i) if (prep[i]) ret+=in[i];
memset(vis,0,sizeof(vis));vis[0]=stamp=1;
memset(bl,0,sizeof(bl));cnt=0;
for (int i=1;i<=n;++i)if (!vis[i]){
int u=i;
++stamp;
for (;!vis[u];u=prep[u]) vis[u]=stamp;
if (vis[u]==stamp){
++cnt;
for (;!bl[u];u=prep[u]) bl[u]=cnt;
}
}
if (!cnt) return ret;
for (int i=1;i<=n;++i) if (!bl[i]) bl[i]=++cnt;
int m0=m;
memset(g,0,sizeof(g));m=1;
for (int i=2;i<=m0;++i)
if (bl[e[i].from]!=bl[e[i].adj])
AddEdge(bl[e[i].from],bl[e[i].adj],e[i].len-in[e[i].adj]);
n=cnt;
}
} int need[N];
double mincost[N];
int main(){
scanf("%d",&n);++n;
memset(g,0,sizeof(g));m=1;
int u,v,m0;double tmp;
for (int i=1;i<n;++i){
scanf("%lf%d",&mincost[i],&need[i]);
if (need[i])
AddEdge(n,i,mincost[i]);
}
scanf("%d",&m0);
while (m0--){
scanf("%d%d%lf",&u,&v,&tmp);
if (need[u]&&need[v]){
AddEdge(u,v,tmp);
mincost[v]=min(mincost[v],tmp);
}
}
double sum=0;
for (int i=1;i<=n;++i)
if (need[i])
sum+=mincost[i]*(need[i]-1);
printf("%.2lf\n",sum+directed_MST());
return 0;
}
bzoj4349: 最小树形图&&bzoj2260: 商店购物的更多相关文章
- bzoj2260: 商店购物 && 4349: 最小树形图
Description Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火.小店的优惠方案十分简单有趣.Grant规定:在一次消费过程中,如果您在本店购买了精制油 ...
- bzoj2260: 商店购物&&4349: 最小树形图
最小树形图问题啊 最小树形图是撒哩,就是给你一个有向图,确定一个根,要你到达所有点,那棵最短路径树的总边权 做这个用的是朱(jv)刘(lao)算法. 首先假如有多个联通块就无解啦 对应每个点(除了根) ...
- [JSOI2008]小店购物 & bzoj4349:最小树形图 最小树形图
---题面(洛谷)--- ---题面(bzoj)--- 其实是同一道题,,,样例都一模一样 题解: 一开始看想了好久,,,还想到了最短路和最小生成树,,然而写的时候才意识到最小生成树应该要用无向边 其 ...
- bzoj4349: 最小树形图
最小树形图模板题…… 这种\(O(nm)\)的东西真的能考到么…… #include <bits/stdc++.h> #define N 60 #define INF 1000000000 ...
- 【Bzoj2260】【Bzoj4349】商店购物 & 最小树形图
目录 List Bzoj 2260 商店购物 Description Input Output Sample Input Sample Output Bzoj 4349 最小树形图 Descripti ...
- BZOJ 2260 商店购物(最小树形图)
不会最小树形图的出门左转 其实如果确定每种商品第一件的购买顺序,那么剩下的商品肯定是以最优惠价格购买的. 如何确定各种商品第一件购买时的最小价值呢? 考虑如果购买了\(a_i\)这种商品,那么就能以\ ...
- Luogu2792 JSOI2008 小店购物 最小树形图
传送门 被题意杀 本以为一个种类的物品一定要一起买 看了题解才知道可以先把所有要买的物品买一个,剩下要买的物品就可以得到这个种类的物品能够得到的最大优惠-- 所以现在只需要知道:第一次买所有物品一遍时 ...
- 【LuoguP2792 】[JSOI2008]小店购物(最小树形图)
题目链接 题目描述 小店的优惠方案十分简单有趣: 一次消费过程中,如您在本店购买了精制油的话,您购买香皂时就可以享受2.00元/块的优惠价:如果您在本店购买了香皂的话,您购买可乐时就可以享受1.50元 ...
- hdu 4966 GGS-DDU (最小树形图)
比较好的讲解:http://blog.csdn.net/wsniyufang/article/details/6747392 view code//首先为除根之外的每个点选定一条入边,这条入边一定要是 ...
随机推荐
- 【QCon笔记】Native 和 Web 融合
#main img{width:100%;} 简介 理清 Native 和 Web 的亮点和痛点,借鉴对方亮点解决自身的痛点,并给出淘系 App 在这些方面的实践. Mobile Web 的协作能力底 ...
- C语言:关于socket的基础知识点
/** * ---结构体--- * * #include <sys/socket.h> * struct sockaddr { * unsigned short sa_family; * ...
- 解析百度搜索结果链接的url,获取真正的url
通常,在百度输入关键词搜索出现的列表页,点击目标链接,然而跳转的时候却是百度地址,经过百度解析,才真的跳到目标页面. 在SEO中,经常需要看下自己的网站排名,又不想手动每天手动去点,可用以下方法去得到 ...
- 十分钟掌握Activity的生命周期与启动模式
1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...
- 如何把自己打造成技术圈的 papi 酱
最近半年,一个叫papi酱的平胸女子连续在微博.朋友圈.创业圈刷屏,当之无愧成了中文互联网的第一大网红.呃,你以为我会巴拉巴拉说一堆网工创业的事?NO,今天想借papi酱的话题跟大家一起聊聊程序员如何 ...
- 将IList转换为List
简单点说,IList<T>直接转换为List<T>可以不用考虑.IList<T>可以用至少2种方式简单的复制成List<T>:1.IList<T ...
- word2vec 实践
关于word2vec,这方面无论中英文的参考资料相当的多,英文方面既可以看官方推荐的论文,也可以看gensim作者Radim Řehůřek博士写得一些文章.而中文方面,推荐 @licstar的< ...
- JavaScript的理解记录(3)
---接上篇 一.函数: 1. 函数定义后直接执行:var f = (function(x){ return x*10}(10)); 2. 函数的调用有四种方式: 作为函数:作为方法:作为构造函 ...
- Memcached, Redis, MongoDB区别
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- Linux不重启的情况下添加硬盘
众所周知,SATA和SCSI是支持热插拔的,但是新装了这类支持热插拔的驱动器,系统不会马上识别的,往往我们需要重启系统来识别,但是有另外一种方法可以很方面的让系统识别新的设备.作为系统管理员,需要了解 ...