题目: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 最小树形图——朱刘算法的更多相关文章

  1. 最小树形图——朱刘算法(Edmonds)

    定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...

  2. POJ 3164 Command Network ( 最小树形图 朱刘算法)

    题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...

  3. poj3164(最小树形图&朱刘算法模板)

    题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...

  4. POJ 3164 Command Network 最小树形图 朱刘算法

    =============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...

  5. 最小树形图--朱刘算法([JSOI2008]小店购物)

    题面 luogu Sol 首先设一个 \(0\) 号点,向所有点连边,表示初始价值 显然这个图的一个 \(0\) 为根的最小有向生成树的边权和就是每个买一次的最小价值 再买就一定能优惠(包含 \(0\ ...

  6. 洛谷P4716 【模板】最小树形图(朱刘算法)

    题意 题目链接 Sol 朱刘算法?感觉又是一种神仙贪心算法 大概就是每次贪心的用每个点边权最小的入边更新答案,如果不行的话就缩起来找其他的边 不详细说了,丢链接走人.. #include<bit ...

  7. POJ - 3164-Command Network 最小树形图——朱刘算法

    POJ - 3164 题意: 一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 题目就是求这个最小的树形图. 参考资料:https://blog.csdn.net/ ...

  8. 【刷题】BZOJ 4349 最小树形图

    Description 小C现在正要攻打科学馆腹地------计算机第三机房.而信息组的同学们已经建好了一座座堡垒,准备迎战.小C作为一种高度智慧的可怕生物,早已对同学们的信息了如指掌. 攻打每一个人 ...

  9. poj 3164 Command Network (朱刘算法)

    题目链接: http://poj.org/problem?id=3164 题目大意: 有n个点(用坐标表示)各点编号分别为1—>n,m条单向路,问能否存在一个花费价值最小的网络,能使从1点到达任 ...

随机推荐

  1. leetcode第26题:删除排序数组的重复项

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 给定数组 ...

  2. nginx 隐藏nginx版本号

    为什么要隐藏 Nginx 版本号:一般来说,软件的漏洞都与版本有关,隐藏版本号是为了防止恶意用户利用软件漏洞进行攻击 worker_processes 1; events { worker_conne ...

  3. C#窗体换肤

    Form1.cs using System;using System.Collections.Generic;using System.ComponentModel;using System.Data ...

  4. 【Python】爬虫-1

    #练习1:获取搜狐网页上所有的URL并且把与篮球有关的内容筛选出来 #算法: #.获取搜狐网站所有内容 #.判断哪些是链接,获取URL格式有效的链接 #.获取每个有效URL网页的内容 #.判断内容是否 ...

  5. 2.21 JS处理滚动条

    2.21 JS处理滚动条 前言    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了.常见场景:当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到 ...

  6. Linux矫正时间

    ntpdate -u ntp.api.bz 可以写到定时任务里,每天矫正一次

  7. Gym.102006:Syrian Collegiate Programming Contest(寒假自训第11场)

    学习了“叙利亚”这个单词:比较温和的一场:几何的板子eps太小了,坑了几发. A .Hello SCPC 2018! 题意:给定一个排列,问它是否满足,前面4个是有序的,而且前面4个比后面的都小. 思 ...

  8. a标签的功能

    最常见的a标签是用来做跳转链接,实际上a标签还有其他的功能,具体如下: <a href="http://www.cnblogs.com/wangzhenyu666/"> ...

  9. 牛客国庆集训派对Day4 I-连通块计数(思维,组合数学)

    链接:https://www.nowcoder.com/acm/contest/204/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  10. Sublime Text3:插件+快捷键+环境变量设置+C/C++编译环境

    环境变量配置 如果电脑里之前下载过Codeblocks或者Dev,找到文件根目录,打开MinGw(或者MinGw64),点开bin目录,将bin文件夹的目录复制下来(以Codeblocks为例,将文件 ...