将每门课等级拆成0,1,2,3...a[i]个点,对每一个等级大于0的点向它低一级连边,权值为0【意思是,若修了level k。则level(0~k)都当做修了】

将输入的边建边,权值为money[i]。

建立根节点,向每一个level 0的点连边,权值为0【由于初始level 0的都修了】

因为题目要求每门课都必须达到最大level,也就是相应图中根节点能到达全部点,问题就变成了求有向图的最小生成树。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>using namespace std;
#define INF 0x3FFFFFF
#define MAXN 5555
struct edge
{int  u,v,w;
}e[9999999];
int n,en;
int pre[MAXN],in[MAXN],id[MAXN],vis[MAXN];
void add(int u,int v,int w)
{e[en].u=u;e[en].v=v;e[en++].w=w;
}
int zl(int root ,int vn)
{int ans=0;int cnt;while(1){for(int i=0;i<vn;i++)in[i]=INF,id[i]=-1,vis[i]=-1;for(int i=0;i<en;i++){if(in[e[i].v]>e[i].w && e[i].u!=e[i].v){pre[e[i].v]=e[i].u;in[e[i].v]=e[i].w;}}in[root]=0;pre[root]=root;for(int i=0;i<vn;i++){ans+=in[i];if(in[i]==INF)return -1;}cnt=0;for(int i=0;i<vn;i++){if(vis[i]==-1){int t=i;while(vis[t]==-1){vis[t]=i;t=pre[t];}if(vis[t]!=i || t==root) continue;for(int j=pre[t];j!=t;j=pre[j])id[j]=cnt;id[t]=cnt++;}}if(cnt==0) break;for(int i=0;i<vn;i++)if(id[i]==-1)id[i]=cnt++;for(int i=0;i<en;i++){int u,v;u=e[i].u;v=e[i].v;e[i].u=id[u];e[i].v=id[v];e[i].w-=in[v];}vn=cnt;root=id[root];}return ans;
}
int a[MAXN],pres[MAXN];
int main()
{int x,y,b,c,d,m;while(~scanf("%d%d",&n,&m)){if(!n&&!m) break;for(int i=1;i<=n;i++)scanf("%d",&a[i]),pres[i]=pres[i-1]+a[i]+1;en=0;int s=0;int t=pres[n]+1;for(int i=1;i<=n;i++){for(int id=1;id<=a[i];id++){add(pres[i-1]+id+1,pres[i-1]+id,0);//      printf("%d -> %d\n",pres[i-1]+id+1,pres[i-1]+id);}add(s,pres[i-1]+1,0);//     printf("%d -> %d\n",pres[i-1]+a[i]+1,t);//     printf("%d -> %d\n",s,pres[i-1]+1);}for(int i=1;i<=m;i++){scanf("%d%d%d%d%d",&x,&y,&b,&c,&d);add(pres[x-1]+y+1,pres[b-1]+c+1,d);//        printf("%d -> %d\n",pres[x-1]+y+1,pres[b-1]+c+1);}int tmp=zl(0,t);if(tmp<0) puts("-1");else printf("%d\n",tmp);}return 0;
}

hdu 4966 最小树形图相关推荐

  1. hdu 2121 最小树形图 +虚根

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121 题意: n个城市,m条单向边,每条边都有一个权值,现在要你求出这样一个节点,由这个节点出发能走遍 ...

  2. NOI数据结构:最小树形图

    最小树形图-朱刘算法详解 +例题解析 最小树形图-朱刘算法详解 +例题解析_pursuit的博客-CSDN博客_最小树形图 图论 -- 生成树 -- 最小树形图 图论 -- 生成树 -- 最小树形图_ ...

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

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

  4. GGS-DDU 【HDU - 4966】【最小树形图】

    题目链接 最小树形图讲解 一道最小树形图的裸题,我们只需要对于在同一学科的由高等级逐一指向低等级的边建为0权值即可,另外的边,建立成有向边即可. #include <iostream> # ...

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

    题目大意:有一个人,想学习N个科目,每个科目都有相应的层次 有M个课程,M个课程的要求是,你的第c个科目的层次要达到l1,才可以参加,参加完这个课程后,你需要缴费money,但你的第d个科目的层次会达 ...

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

    多校综合排名前25名的学校请发送邮件到HDUACM@QQ.COM,告知转账信息(支付宝或者卡号)  GGS-DDU Time Limit: 2000/1000 MS (Java/Others)     ...

  7. HDU 4009 Transfer water (最小树形图+虚根)

    题意:有一个村庄需要修建供水系统.每户居民的房子都有一个三维坐标,每户居民可以选择自己挖井或者从其他居民家里引水.挖水井和引水分别需要花费不同的钱.每户居民有一个意愿表,只愿意对表内的居民家供水.最后 ...

  8. HDU 2121 Ice_cream’s world II (最小树形图+虚根)

    题意:有n个点(0~n-1),m条有向边,问以哪个点作为起点使得最小生成树的权值最小,如果可以构成输出权值和顶点编号,否则输出impossible. 题解:最小树形图+虚根 还好做了这题,板子有点问题 ...

  9. hdu 4009 Transfer water(最小树形图模板)

    题目链接:点击打开链接 Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Ja ...

最新文章

  1. 注意python函数参数的可变变量的传递
  2. python有趣代码-一个有意思的 Python 训练项目集
  3. php渲染页面简单例子,微信小程序如何渲染html内容(示例讲解)
  4. request获取页面html内容,request、request-promise、cheerio抓取网页内容
  5. HBase 参考指南 3.0 翻译活动期待大家的参与 | ApacheCN 1
  6. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ
  7. input标签里面的文字位置
  8. 使用Jackson解析JSON
  9. Javascript:创建对象的方式
  10. linux多进程分割大文件,Linux中split大文件分割和cat合并文件详解
  11. Java JDBC连接数据库
  12. Qt Data Visualization 3D可视化
  13. 验票系统认证服务器地址,北京增值税发票勾选认证(选择确认)平台入口
  14. OpenCV之模板匹配
  15. 3个方面:做好竞品数据分析!
  16. 恒指赵鑫:8.9恒指德指实盘指导记录总结与晚盘前瞻
  17. 我的思文斋:积水成渊则蛟龙生焉
  18. Python能做什么?
  19. 使用@Valid+BindingResult进行controller参数校验
  20. #职场#采编和新媒体运营怎么选?

热门文章

  1. mysql计算秒_如何在MySQL中基于秒计算时间?
  2. python性能优化之函数执行时间分析_python性能优化之函数执行时间分析
  3. webpack打包后引用cdn的js_呕心沥血编写的webpack多入口零基础配置 【建议收藏】...
  4. 2021年8月最新sci-hub可用网址,高速稳定
  5. js 返回上一页面_构建大型 Vue.js 项目的10条建议
  6. 计算机视觉与深度学习 | ORB特征匹配:基于OpenCV+Python(暴力匹配、FLANN)
  7. Python练习 | 初识Python、数据类型、基本语句
  8. 数据结构学习笔记(五):重识字符串(String)
  9. C语言main()函数详解
  10. 北航计算机应用基础 统考,北航10秋学期《计算机应用基础》模拟题.doc