最小树形图模板题……

这种\(O(nm)\)的东西真的能考到么……

#include <bits/stdc++.h>
#define N 60
#define INF 1000000000
using namespace std;
int n, m, nn;
double ai[N], an[N], ci[][N][N], ans;
int bc[N];
int ini[N], vis[N], inc[N], inl[N];
int dfn;
int dfs(int t)
{
vis[t] = dfn;
if (vis[ini[t]] == vis[t])
return ini[t];
else if (vis[ini[t]])
return ;
else return dfs(ini[t]);
} int main()
{
scanf("%d", &n);
for (int i = ; i <= n; ++ i)
for (int j = ; j <= n; ++ j)
ci[][i][j] = INF;
for (int i = ; i <= n; ++ i)
scanf("%lf%d", &ai[i], &bc[i]), an[i] = ai[i], ci[][][i] = ai[i];
scanf("%d", &m);
for (int i = ; i <= m; ++ i)
{
int a, b; double c;
scanf("%d%d%lf", &a, &b, &c);
if (a != b) ci[][a][b] = min(ci[][a][b], c);
an[b] = min(an[b], c);
}
for (int i = ; i <= n; ++ i) ans += an[i] * (bc[i] - );
int tmp = , wh = ; nn = n;
while (wh)
{
wh = ;
for (int i = ; i <= nn; ++ i)
{
double mn = INF;
for (int j = ; j <= nn; ++ j)
if (ci[tmp][j][i] < mn)
mn = ci[tmp][j][i], ini[i] = j;
}
for (int i = ; i <= nn; ++ i) vis[i] = ; vis[] = -;
for (int i = ; i <= nn; ++ i)
if (!vis[i])
{
dfn ++;
int x = dfs(i);
if (x)
{
int tot = ;
wh = ;
for (int j = ; j <= nn; ++ j) inc[j] = ;
for (int j = ini[x]; j != x; j = ini[j]) inc[j] = ; inc[x] = ;
for (int j = ; j <= nn; ++ j) if (!inc[j]) inl[j] = tot ++; else ans += ci[tmp][ini[j]][j];
for (int j = ; j <= nn; ++ j)
for (int k = ; k <= nn; ++ k)
ci[!tmp][j][k] = INF;
for (int j = ; j <= nn; ++ j)
for (int k = ; k <= nn; ++ k)
{
if (!inc[j])
{
if (!inc[k])
ci[!tmp][inl[j]][inl[k]] = min(ci[!tmp][inl[j]][inl[k]], ci[tmp][j][k]);
else
ci[!tmp][inl[j]][tot] = min(ci[!tmp][inl[j]][tot], ci[tmp][j][k] - ci[tmp][ini[k]][k]);
}
else if (!inc[k])
ci[!tmp][tot][inl[k]] = min(ci[!tmp][tot][inl[k]], ci[tmp][j][k]);
}
nn = tot;
break;
}
}
if (!wh)
for (int i = ; i <= nn; ++ i) ans += ci[tmp][ini[i]][i];
else tmp ^= ;
}
printf("%.2lf", ans);
}

bzoj4349: 最小树形图的更多相关文章

  1. [JSOI2008]小店购物 & bzoj4349:最小树形图 最小树形图

    ---题面(洛谷)--- ---题面(bzoj)--- 其实是同一道题,,,样例都一模一样 题解: 一开始看想了好久,,,还想到了最短路和最小生成树,,然而写的时候才意识到最小生成树应该要用无向边 其 ...

  2. bzoj4349: 最小树形图&&bzoj2260: 商店购物

    双倍经验大法吼 昨天发现不会最小属性图&朱刘算法啊 吓得我赶紧补了一发 朱刘算法模板题 #include <iostream> #include <cstdio> #i ...

  3. 【Bzoj2260】【Bzoj4349】商店购物 & 最小树形图

    目录 List Bzoj 2260 商店购物 Description Input Output Sample Input Sample Output Bzoj 4349 最小树形图 Descripti ...

  4. hdu 4966 GGS-DDU (最小树形图)

    比较好的讲解:http://blog.csdn.net/wsniyufang/article/details/6747392 view code//首先为除根之外的每个点选定一条入边,这条入边一定要是 ...

  5. HDU 4966 GGS-DDU(最小树形图)

    n个技能,每个技能有0-a[i]的等级,m个课程,每个课程需要前置技能c[i]至少达到lv1[i]等级,效果是技能d[i]达到lv2[i]等级,花费w[i]. 输出最小花费使得全技能满级(初始全技能0 ...

  6. hdu3072 强连通+最小树形图

    题意:有一个人他要把一个消息通知到所有人,已知一些通知关系:A 能通知 B,需要花费 v,而又知道,如果某一个小团体,其中的成员相互都能直接或间接通知到,那么他们之间的消息传递是不需要花费的,现在问这 ...

  7. HDU4966 GGS-DDU(最小树形图)

    之前几天想着补些算法的知识,学了一下最小树形图的朱刘算法,不是特别理解,备了份模板以备不时之需,想不到多校冷不丁的出了个最小树形图,没看出来只能表示对算法不太理解吧,用模板写了一下,然后就过了.- - ...

  8. POJ3164 Command Network(最小树形图)

    图论填个小坑.以前就一直在想,无向图有最小生成树,那么有向图是不是也有最小生成树呢,想不到还真的有,叫做最小树形图,网上的介绍有很多,感觉下面这个博客介绍的靠谱点: http://www.cnblog ...

  9. HDU ACM 2121 Ice_cream’s world II (无根最小树形图)

    [解题思路]这题先看了NotOnlySuccess的解题思路,即设置虚根再处理的做法:弄了一个上午,再次有种赶脚的感觉~~如果需要找出为什么需要去比所有权值之和更大的数为新增的虚边的话,一开始我理解仅 ...

随机推荐

  1. [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  2. 重度使用示波器进行优化分析——一个DSDA项目回顾

    这是若干年前一个项目,最近有时间整理一下.回忆起来,印象最深刻的就是重度使用示波器辅助分析,进行优化. 项目背景是在原有项目3G+项目基础上,增加一颗2G+ Modem,使支持DSDA功能. 在介绍D ...

  3. 常用Linux命令

    1.mkdir 建立目录 $ mkdir testdir 2.ls   列出目录下的内容的详细信息  ls -al testdir 3.cd  更换当前工作目录   cd testdir 4.pwd  ...

  4. 分享一种容易理解的js去重排序方法

    <script> var arr=[1,8,6,4,88,22,99,4,6,86,5,58,89,5]; //先使用sort()函数去重 var a=arr.sort(function ...

  5. 图说C++对象模型:对象内存布局详解

    0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看. 本文的结论都在VS2013上得到验证.不同的编译器在内存布局的细节上可能有 ...

  6. cocos2d-x屏幕分辨率,窗口大小总结

    这个东西很烦人,相信很多人都不理解 今天来总结一下,首先有很多概念都要事先弄得清楚明白 1.屏幕分辨率 所谓屏幕分辨率相信很多人都知道他的概念,不就是1280pxX720PX吗?不就是这种形式吗?有什 ...

  7. bzoj 1061 志愿者招募 有上下界费用流做法

    把每一天看作一个点,每一天的志愿者数目就是流量限制,从i到i+1连边,上下界就是(A[i],+inf). 对于每一类志愿者,从T[i]+1到S[i]连边,费用为招募一个志愿者的费用,流量为inf.这样 ...

  8. Git bash下中文乱码问题

    Git bash下中文乱码--解决方案 解决办法1: 在git bash下,右键 出现下图,选择options: 选择"Text" 将Character set设置为 UTF-8 ...

  9. [个人论文]一种基于GPU并行计算的MD5密码解密方法

    求轻喷... [顺便get一份LaTeX论文模板....还是XeLaTex好用.珍爱生命远离CJK http://files.cnblogs.com/files/pdev/paper.zip

  10. MVC 总结

    以下内容摘自 PHP for Absolute Beginners, Thomas Blom Hansen & Jason Lengstorf The model-view-controlle ...