题目链接:https://ac.nowcoder.com/acm/contest/548/C

题意:有n个知识点,学会每个知识点花T[i],已经学会了其中k个知识点,有m组关系,t1,t2,t3,表示学会t2/t3之后学另一个知识点需要花H[i],时限为t,问能否在时限之前学完所有的知识点。

思路:将n个知识点编号为1..n,然后构造一个虚拟的知识点0,该知识点已经学会,且该知识点到其它知识点的距离分别是T[i],若知识点i已经学会了,则0到i的距离为0,m组关系对应m条边,这样就简化成了求最小生成树的问题了。将边按权值升序排序,利用kruskal算法就行了。但要注意的是题目的输入量十分大,达到了10的7次方,所以需要读入优化,不然会超时。

AC代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. inline int read(){
  5. int x=,f=;char ch=;
  6. while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
  7. while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
  8. return f?-x:x;
  9. }
  10.  
  11. inline long long LLread(){
  12. long long x=;int f=;char ch=;
  13. while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
  14. while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
  15. return f?-x:x;
  16. }
  17.  
  18. struct node{
  19. int u,v,w;
  20. }a[];
  21.  
  22. bool cmp(node x,node y){
  23. return x.w<y.w;
  24. }
  25.  
  26. typedef long long LL;
  27. int n,m,k,t,cnt,p,root[];
  28. LL sum;
  29.  
  30. void add(int x,int y,int z){
  31. a[++p].u=x;
  32. a[p].v=y;
  33. a[p].w=z;
  34. }
  35.  
  36. int getr(int kk){
  37. if(root[kk]==kk) return kk;
  38. else return root[kk]=getr(root[kk]);
  39. }
  40.  
  41. int main(){
  42. n=read(),m=read(),k=read(),t=LLread();
  43. for(int i=;i<=n;++i)
  44. root[i]=i;
  45. for(int i=;i<=n;++i){
  46. int tmp=read();
  47. add(,i,tmp);
  48. }
  49. for(int i=;i<=k;++i){
  50. int tmp=read();
  51. add(,tmp,);
  52. }
  53. for(int i=;i<=m;++i){
  54. int t1=read(),t2=read(),t3=read();
  55. add(t1,t2,t3);
  56. }
  57. sort(a+,a+p+,cmp);
  58. for(int i=;i<=p;++i){
  59. int x=a[i].u,y=a[i].v,z=a[i].w,rx,ry;
  60. rx=getr(x),ry=getr(y);
  61. if(rx!=ry){
  62. ++cnt;
  63. sum+=z;
  64. root[ry]=rx;
  65. }
  66. if(cnt==n||sum>t) break;
  67. }
  68. if(cnt==n&&sum<=t) printf("Yes\n");
  69. else printf("No\n");
  70. return ;
  71. }

牛客网练习赛43-C(图论)的更多相关文章

  1. 牛客网练习赛23 F 托米的游戏

    链接:https://www.nowcoder.com/acm/contest/156/F 来源:牛客网 题目描述 题目背景编不下去了 托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一 ...

  2. 牛客网练习赛28A

    题目链接:https://www.nowcoder.com/acm/contest/200/A 链接:https://www.nowcoder.com/acm/contest/200/A来源:牛客网 ...

  3. 牛客网练习赛18 A 【数论/整数划分得到乘积最大/快速乘】

    链接:https://www.nowcoder.com/acm/contest/110/A 来源:牛客网 题目描述 这题要你回答T个询问,给你一个正整数S,若有若干个正整数的和为S,则这若干的数的乘积 ...

  4. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...

  5. 牛客网练习赛34-D-little w and Exchange(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. 牛客网练习赛25 C 再编号

    链接:https://www.nowcoder.com/acm/contest/158/C来源:牛客网 定义对 a 的再编号为 a' ,满足 . 现在有 m 次询问,每次给定 x,t ,表示询问经过 ...

  7. 牛客网练习赛t2(线段树)

    题解: 好像因为他说了 数据范围全部在ll以内 所以直接暴力就可以过了 比较正常是用线段树来维护 洛谷上有道模板题是支持加,乘,区间和 而这题还多了区间平方和的操作 按照那题的操作 我们维护的时候保证 ...

  8. 牛客网练习赛7-B-购物

    在遥远的东方,有一家糖果专卖店. 这家糖果店将会在每天出售一些糖果,它每天都会生产出m个糖果,第i天的第j个糖果价格为C[i][j]元. 现在的你想要在接下来的n天去糖果店进行选购,你每天可以买多个糖 ...

  9. 牛客网练习赛7-D-无向图(bfs,链式前向星)

    题意:中文题: 思路:就是找某个点距离其他点的距离,他给你很多点也无所谓.用一个dist[]数组,这个数组保存的是他给你的点到其他点的最短距离且标记的作用,然后bfs搜索就行了. 代码: #inclu ...

随机推荐

  1. winform 之控件ListView

    使用ListView构建表格展示数据 1.添加列数据:控件ListView--上方按钮--视图(Details)--编辑列--添加 2.添加行数据:--编辑项(行)--添加 添加数据:Text:默认添 ...

  2. 15. combobox、combotree获取显示值和value值方式

    $('#form1 #clsName').combobox('getValue'); $('#form1 #clsName').combobox('getText'); $('#form1 #clsN ...

  3. flex学习笔记 使用函数,显示实时更新的标签

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  4. <面试> PHP 常见算法

    排序算法 1. 冒泡排序(数组排序) 基本思想:对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换.这样每遍历一次,最小的数值就 ...

  5. 使用cuteFTP与虚拟机交互文件---安装ftp服务

    安装ftp服务,以便在Windows中使用cuteFTP与虚拟机交互文件,使用sudo apt-get install vsftpd 安装完后,打开/etc/vsftpd.conf文件,去掉local ...

  6. linux 文件目录类的指令 包含查找

    pwd  :显示当前目录的绝对路径 ls : 显示当前目录 -a 显示所有文件 包括隐藏文件 -l  以列表的方式进行显示 cd  切换目录 cd ~ :返回家目录 cd .. :返回上一级的目录 m ...

  7. RAD Tokyo 10.2.2

    TDialogService类 如果您是使用比较新的RAD Studio版本. 那么您应该开始改用FMX.DialogService程序单元中TDialogService类别的类别方法来取代以前的Me ...

  8. 09_组件三大属性(3)_refs和事件处理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. UICollectionView自定义cell布局layout

    写一个类继承UICollectionViewLayout,这个类需要提供一个数组来标识各个cell的属性信息,包括位置,size大小,返回一个UICollectionViewLayoutAttribu ...

  10. 尚硅谷springboot学习12-profile

    一个项目对应不同的环境可以会有不同的配置,如开发,测试,生产环境使用不同的端口,这时可以设置profile变换不同的环境 通过spring.profiles.active切换环境 1.多Profile ...