bzoj 4349 最小树形图——朱刘算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4349.
学习博客:http://www.cnblogs.com/xzxl/p/7243466.html
关于这道题,图的边权不是 代价*次数 , 而就是一次的代价,因为只要考虑每个堡垒第一次以什么代价被打,之后都可以用最低代价打它。
注意 “不需要攻打” 的堡垒。注意重连边的时候把边的端点改成新的标号。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define db double
using namespace std;
const int N=,M=; const db INF=1e6;
int n,b[N];db a[N],mn[N]; bool ok[N];
namespace DMST{
int xnt,pre[N],id[N],vis[N]; db in[N];
struct Ed{
int x,y; db w;
Ed(int x=,int y=,db w=):x(x),y(y),w(w) {}
}ed[M];
void add(int x,int y,db z){ ed[++xnt]=Ed(x,y,z); }
db solve(int V,int E)
{
db ret=;
while()
{
for(int i=;i<=V;i++)in[i]=INF,id[i]=vis[i]=;
for(int i=,u,v;i<=E;i++)
{
u=ed[i].x; v=ed[i].y;
if(in[v]>ed[i].w)in[v]=ed[i].w, pre[v]=u;
}
for(int i=;i<=V;i++)
{ if(in[i]==INF)return -; ret+=in[i];}
int cnt=;
for(int i=;i<=V;i++)
{
vis[i]=i; int cr=pre[i];
while(cr&&!vis[cr]) vis[cr]=i, cr=pre[cr];
if(vis[cr]==i)
{
id[cr]=++cnt; cr=pre[cr];
while(!id[cr])id[cr]=cnt, cr=pre[cr];
}
}
if(!cnt)return ret;
for(int i=;i<=V;i++)if(!id[i])id[i]=++cnt;
V=cnt; int tE=E; E=;
for(int i=,u,v;i<=tE;i++)
{
u=ed[i].x; v=ed[i].y;
if(id[u]==id[v])continue;
ed[++E].x=id[u]; ed[E].y=id[v];//id[]
ed[E].w=ed[i].w-in[v];
}
}
}
}
int main()
{
int tn;scanf("%d",&tn);
for(int i=;i<=tn;i++)
{
scanf("%lf%d",&a[i],&b[i]);
if(!b[i]){ ok[i]=;continue;}
DMST::id[i]=++n; DMST::add(,DMST::id[i],a[i]);
}
int m; db d; scanf("%d",&m);
for(int i=,u,v;i<=m;i++)
{
scanf("%d%d%lf",&u,&v,&d);
if(ok[u]||ok[v])continue;
DMST::add(DMST::id[u],DMST::id[v],d);
a[v]=min(a[v],d);
}
db ans=DMST::solve(n,DMST::xnt);
for(int i=;i<=tn;i++)//tn
if(!ok[i])ans+=(b[i]-)*a[i];
printf("%.2f\n",ans);
return ;
}
bzoj 4349 最小树形图——朱刘算法的更多相关文章
- 最小树形图——朱刘算法(Edmonds)
定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...
- POJ 3164 Command Network ( 最小树形图 朱刘算法)
题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...
- poj3164(最小树形图&朱刘算法模板)
题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...
- POJ 3164 Command Network 最小树形图 朱刘算法
=============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...
- 最小树形图--朱刘算法([JSOI2008]小店购物)
题面 luogu Sol 首先设一个 \(0\) 号点,向所有点连边,表示初始价值 显然这个图的一个 \(0\) 为根的最小有向生成树的边权和就是每个买一次的最小价值 再买就一定能优惠(包含 \(0\ ...
- 洛谷P4716 【模板】最小树形图(朱刘算法)
题意 题目链接 Sol 朱刘算法?感觉又是一种神仙贪心算法 大概就是每次贪心的用每个点边权最小的入边更新答案,如果不行的话就缩起来找其他的边 不详细说了,丢链接走人.. #include<bit ...
- POJ - 3164-Command Network 最小树形图——朱刘算法
POJ - 3164 题意: 一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 题目就是求这个最小的树形图. 参考资料:https://blog.csdn.net/ ...
- 【刷题】BZOJ 4349 最小树形图
Description 小C现在正要攻打科学馆腹地------计算机第三机房.而信息组的同学们已经建好了一座座堡垒,准备迎战.小C作为一种高度智慧的可怕生物,早已对同学们的信息了如指掌. 攻打每一个人 ...
- poj 3164 Command Network (朱刘算法)
题目链接: http://poj.org/problem?id=3164 题目大意: 有n个点(用坐标表示)各点编号分别为1—>n,m条单向路,问能否存在一个花费价值最小的网络,能使从1点到达任 ...
随机推荐
- MySQL:存储过程和函数
存储过程和函数 一.创建存储过程和函数 1.创建存储过程 语法: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic . ...
- UIIimageView读取图片的两种方式及动画的执行
/**count:图片数量 name:图片名称*/ - (void)runAnimationWithCount:(int)count name:(NSString *)name { if(self.t ...
- vue中七牛插件使用
<template> <div id="cxUpload" class="cx-upload"> <button id=" ...
- delphi reintroduce作用
当在子类中重载或者重新声明父类的虚方法时,使用 reintroduce 关键字告知编译器,可以消除警告信息. 如: TParent = class procedure proc;virtual; ...
- HDU 6098 17多校6 Inversion(思维+优化)
Problem Description Give an array A, the index starts from 1.Now we want to know Bi=maxi∤jAj , i≥2. ...
- builtroot 添加git 下载方式
1.buildroot/Config.in 配置default git server eg:config xxxx_GIT_SITE string "git site" defau ...
- 2.4 CSS定位
前言 大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求.css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁.这一篇css ...
- 【leetcode】283. Move Zeroes
problem 283. Move Zeroes solution 先把非零元素移到数组前面,其余补零即可. class Solution { public: void moveZeroes(vect ...
- 新添加一块硬盘制作LVM卷并进行分区挂载
linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...
- Unity 3D光源-Directional平行光/逆光效果,光晕详解、教程
Unity4大光源之平行光 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...