博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4966:GGS-DDU
阅读量:5882 次
发布时间:2019-06-19

本文共 1147 字,大约阅读时间需要 3 分钟。

HDU:GGS-DDU

题目链接:

题目大意:有$n$个课程,初始都在等级$0$,每个课程需要达到等级$a[i]$.满足$x$课程等级大于等于$dx$时,可花费$w$使得$y$课程等级达到$dy$,求最少需要多少钱?

最小树形图

一个有向图若存在从某个点开始的到达所有的的一个最小生成树,则它就是最小树形图。

引自

为每个课程的每个等级设置结点,若$x$课程等级大于等于$dx$时,可花费$w$使得$y$课程等级达到$dy$,则

建一条从$x$课程等级等于$dx$的点到$y$课程等级等于$dy$的点,长度为$w$的有向边.

因为课程等级是向下兼容的,即等级高的点可以无消耗达到等级低的点,故每个课程等级高的点向等级低的点建长度为$0$的边.

从而,求最小代价转化为了求整张图的最小树形图(若某课程达到最高等级那么一定可以达到较低等级).

求最小树形图的复杂度为$O(VE)$.

代码如下:

1 #include 
2 #include
3 #include
4 #define N 55 5 #define MAXN 25055 6 #define MAXM 30000 7 using namespace std; 8 const int inf=10000000; 9 int n,m,a[N]; 10 struct ZL{ 11 int n,m; 12 int pre[MAXN],id[MAXN],vis[MAXN]; 13 int inEdge[MAXN]; 14 struct Edge{ 15 int u,v; 16 int w; 17 }edge[MAXM]; 18 void init(int n_){ 19 n=n_;m=0; 20 } 21 void addedge(int u,int v,int w){ 22 edge[m].u=u; 23 edge[m].v=v; 24 edge[m].w=w; 25 m++; 26 } 27 int Directed_MST(int root){ 28 int ans=0,u,v; 29 while(1){ 30 for(int i=0;i

 

转载于:https://www.cnblogs.com/barrier/p/6852833.html

你可能感兴趣的文章
虚拟机 centos设置代理上网
查看>>
Struts2中Date日期转换的问题
查看>>
mysql 数据类型
查看>>
Ubuntu 设置当前用户sudo免密码
查看>>
设置tomcat远程debug
查看>>
android 电池(一):锂电池基本原理篇【转】
查看>>
Total Command 常用快捷键
查看>>
ionic 调用手机的打电话功能
查看>>
怎么使用阿里云直播服务应用到现在主流直播平台中
查看>>
Xcode全局替换内容,一键Replace
查看>>
1000 加密算法
查看>>
exif_imagetype() 函数在linux下的php中不存在
查看>>
Ruby的case语句
查看>>
Linux的链接文件-ln命令
查看>>
maven的tomcat插件如何进行debug调试
查看>>
table表头固定
查看>>
截取字符串中两个字符串中的字符串
查看>>
spring xml properties split with comma for list
查看>>
判断点是否在三角形内
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊验证username是否反复功能!)...
查看>>