牛客网练习赛43-C(图论)
题目链接: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代码:
#include<bits/stdc++.h>
using namespace std; inline int read(){
int x=,f=;char ch=;
while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return f?-x:x;
} inline long long LLread(){
long long x=;int f=;char ch=;
while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return f?-x:x;
} struct node{
int u,v,w;
}a[]; bool cmp(node x,node y){
return x.w<y.w;
} typedef long long LL;
int n,m,k,t,cnt,p,root[];
LL sum; void add(int x,int y,int z){
a[++p].u=x;
a[p].v=y;
a[p].w=z;
} int getr(int kk){
if(root[kk]==kk) return kk;
else return root[kk]=getr(root[kk]);
} int main(){
n=read(),m=read(),k=read(),t=LLread();
for(int i=;i<=n;++i)
root[i]=i;
for(int i=;i<=n;++i){
int tmp=read();
add(,i,tmp);
}
for(int i=;i<=k;++i){
int tmp=read();
add(,tmp,);
}
for(int i=;i<=m;++i){
int t1=read(),t2=read(),t3=read();
add(t1,t2,t3);
}
sort(a+,a+p+,cmp);
for(int i=;i<=p;++i){
int x=a[i].u,y=a[i].v,z=a[i].w,rx,ry;
rx=getr(x),ry=getr(y);
if(rx!=ry){
++cnt;
sum+=z;
root[ry]=rx;
}
if(cnt==n||sum>t) break;
}
if(cnt==n&&sum<=t) printf("Yes\n");
else printf("No\n");
return ;
}
牛客网练习赛43-C(图论)的更多相关文章
- 牛客网练习赛23 F 托米的游戏
链接:https://www.nowcoder.com/acm/contest/156/F 来源:牛客网 题目描述 题目背景编不下去了 托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一 ...
- 牛客网练习赛28A
题目链接:https://www.nowcoder.com/acm/contest/200/A 链接:https://www.nowcoder.com/acm/contest/200/A来源:牛客网 ...
- 牛客网练习赛18 A 【数论/整数划分得到乘积最大/快速乘】
链接:https://www.nowcoder.com/acm/contest/110/A 来源:牛客网 题目描述 这题要你回答T个询问,给你一个正整数S,若有若干个正整数的和为S,则这若干的数的乘积 ...
- 牛客网练习赛26B(简单的dp)
题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...
- 牛客网练习赛34-D-little w and Exchange(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客网练习赛25 C 再编号
链接:https://www.nowcoder.com/acm/contest/158/C来源:牛客网 定义对 a 的再编号为 a' ,满足 . 现在有 m 次询问,每次给定 x,t ,表示询问经过 ...
- 牛客网练习赛t2(线段树)
题解: 好像因为他说了 数据范围全部在ll以内 所以直接暴力就可以过了 比较正常是用线段树来维护 洛谷上有道模板题是支持加,乘,区间和 而这题还多了区间平方和的操作 按照那题的操作 我们维护的时候保证 ...
- 牛客网练习赛7-B-购物
在遥远的东方,有一家糖果专卖店. 这家糖果店将会在每天出售一些糖果,它每天都会生产出m个糖果,第i天的第j个糖果价格为C[i][j]元. 现在的你想要在接下来的n天去糖果店进行选购,你每天可以买多个糖 ...
- 牛客网练习赛7-D-无向图(bfs,链式前向星)
题意:中文题: 思路:就是找某个点距离其他点的距离,他给你很多点也无所谓.用一个dist[]数组,这个数组保存的是他给你的点到其他点的最短距离且标记的作用,然后bfs搜索就行了. 代码: #inclu ...
随机推荐
- PHP微信公共号H5页面跳转小程序。
1.H5跳转小程序. function myfun(){ var openid = "<?=$_SESSION['openid']?>"; wx.miniProgram ...
- django之runserver命令分析
def inner_run(self, *args, **options):#runserver命令执行的内容 # If an exception was silenced in Management ...
- Jquery的一些基本操作
/*获得TEXT.AREATEXT的值*/ var textval = $("#text_id").attr("value"); //或者 var textva ...
- python_03 各种运算符
1.算数运算 2.比较运算 3.赋值运算 4.逻辑运算 先计算括号中表达式 计算顺序:and,or,not在一个表达式中从前到后计算, 若and前一个元素为false则立刻返回为False,不计算后面 ...
- vue:一个vue可以使用的视频插件
网址:https://www.jianshu.com/p/e8e747e33ef0 1:安装依赖 npm install vue-video-player -S 2:引入配置(main.js) imp ...
- etcd集群故障处理(转)
1. etcd安装 rpm -ivh etcd-3.2.15-1.el7.x86_64.rpm systemctl daemon-reload systemctl enable etcd system ...
- 计算机网络协议包头赏析-IP
上次和大家聊了聊以太网的帧格式,本文会讲解IP数据报格式的定义. == 开门见山,先上图: 任何一个IP数据报都是由首部和数据两部分组成,而且首部基本是固定长度的,长度为20字节.这一点很重要,其他都 ...
- python小实例一:简单爬虫
本文所谓的爬虫就是通过本地远程访问url,然后将url的读成源代码形式,然后对源代码进行解析,获取自己需要的数据,相当于简单数据挖掘.本文实现的是将一个网页的图片爬出保存到本地的过程,例子很简单,用的 ...
- ubuntu去除带锁文件的锁 sudo chown 用户名 目标文件夹/ -R
sudo chown 用户名 目标文件夹/ -R sudo chown han dir/ -R
- unity3d assetbundle打包策略
由于assetbundle打包存在依赖的问题,所有资源要进行合理的分包 零.代码 代码都放在本地,包括NGUI等插件的代码.shader代码(内置的shader无需打包,而自定义的shader还是需要 ...