题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4349.

学习博客:http://www.cnblogs.com/xzxl/p/7243466.html

关于这道题,图的边权不是 代价*次数 , 而就是一次的代价,因为只要考虑每个堡垒第一次以什么代价被打,之后都可以用最低代价打它。

注意 “不需要攻打” 的堡垒。注意重连边的时候把边的端点改成新的标号。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define db double
  5. using namespace std;
  6. const int N=,M=; const db INF=1e6;
  7. int n,b[N];db a[N],mn[N]; bool ok[N];
  8. namespace DMST{
  9. int xnt,pre[N],id[N],vis[N]; db in[N];
  10. struct Ed{
  11. int x,y; db w;
  12. Ed(int x=,int y=,db w=):x(x),y(y),w(w) {}
  13. }ed[M];
  14. void add(int x,int y,db z){ ed[++xnt]=Ed(x,y,z); }
  15. db solve(int V,int E)
  16. {
  17. db ret=;
  18. while()
  19. {
  20. for(int i=;i<=V;i++)in[i]=INF,id[i]=vis[i]=;
  21. for(int i=,u,v;i<=E;i++)
  22. {
  23. u=ed[i].x; v=ed[i].y;
  24. if(in[v]>ed[i].w)in[v]=ed[i].w, pre[v]=u;
  25. }
  26. for(int i=;i<=V;i++)
  27. { if(in[i]==INF)return -; ret+=in[i];}
  28. int cnt=;
  29. for(int i=;i<=V;i++)
  30. {
  31. vis[i]=i; int cr=pre[i];
  32. while(cr&&!vis[cr]) vis[cr]=i, cr=pre[cr];
  33. if(vis[cr]==i)
  34. {
  35. id[cr]=++cnt; cr=pre[cr];
  36. while(!id[cr])id[cr]=cnt, cr=pre[cr];
  37. }
  38. }
  39. if(!cnt)return ret;
  40. for(int i=;i<=V;i++)if(!id[i])id[i]=++cnt;
  41. V=cnt; int tE=E; E=;
  42. for(int i=,u,v;i<=tE;i++)
  43. {
  44. u=ed[i].x; v=ed[i].y;
  45. if(id[u]==id[v])continue;
  46. ed[++E].x=id[u]; ed[E].y=id[v];//id[]
  47. ed[E].w=ed[i].w-in[v];
  48. }
  49. }
  50. }
  51. }
  52. int main()
  53. {
  54. int tn;scanf("%d",&tn);
  55. for(int i=;i<=tn;i++)
  56. {
  57. scanf("%lf%d",&a[i],&b[i]);
  58. if(!b[i]){ ok[i]=;continue;}
  59. DMST::id[i]=++n; DMST::add(,DMST::id[i],a[i]);
  60. }
  61. int m; db d; scanf("%d",&m);
  62. for(int i=,u,v;i<=m;i++)
  63. {
  64. scanf("%d%d%lf",&u,&v,&d);
  65. if(ok[u]||ok[v])continue;
  66. DMST::add(DMST::id[u],DMST::id[v],d);
  67. a[v]=min(a[v],d);
  68. }
  69. db ans=DMST::solve(n,DMST::xnt);
  70. for(int i=;i<=tn;i++)//tn
  71. if(!ok[i])ans+=(b[i]-)*a[i];
  72. printf("%.2f\n",ans);
  73. return ;
  74. }

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. 2018年3月最新的Ubuntu 16.04.4漏洞提权代码

    2018年3月最新的Ubuntu 16.04.4漏洞提权代码,本代码取自Vitaly Nikolenko的推子 亲测阿里云提权可用. /* * Ubuntu 16.04.4 kernel priv e ...

  2. 解决 canvas 将图片转为base64报错

    var canvas=document.getElementById("canvas"),//获取canvas ctx = canvas.getContext("2d&q ...

  3. Eclipse远程调试Tomcat

    1.Linux服务器中在Tomcat的catalina.sh文件添加如下内容: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,ad ...

  4. Spring REST API

    RPC是面向服务的,并关注与行为和动作:而REST是面向资源的,强调描述应用程序的事务的名词.REST将资源的状态以最适合客户端或服务端的形式从服务器端转移到客户端. REST Representat ...

  5. 当超强台风“山竹”即将冲进南海,Power BI 你怎么看?

    这个周末“山竹 ”强势来袭!很多人的目光都在关注暴力水果“山竹”,这个号称70年最强最大风力超17级 台风“山竹”今天就已经在小悦家窗台肆虐咆哮了一天了!不知其他的小伙伴们是不是好好的一个周末就只能被 ...

  6. Python 使用sqlalchemy操作MYSQL

    1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql

  7. Refused to execute inline event handler because it violates the following Content Security Policy directive: "xxx". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...')

    /********************************************************************************* * Refused to exec ...

  8. JAVA 第四章 数组

    数组保存的是一组有顺序的.具有相同类型的数据. 1.创建: 数组的声明格式: int arrary[]; int [] array1, array2; //同时声明多个数组. 上面的语句只是对数组进行 ...

  9. 利用Git hub创建博客

    1.准备工作 到Git官网 下载Git,并且配置环境变量 2.注册Git Hub账号 到Git Hub官网注册相关账号,比如本文的账号为13627225740L,并至New repository创建仓 ...

  10. time,datetime模块

    time & datetime 模块 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面 ...