[NOI2014]魔法森林题解
这道题正解其实是LCT,然而貌似SPFA也可以成功水过,所以根本不知道LCT的我只能说SPFA了。
这道题最大的限制是两种精灵就意味着一条道可能有两个权值,因此我们需要去将其中一个固定,然后再推另一个权值,也就是说,我们可以,枚举每一条边的a,然后只走a值不大于他的边。
然而并没有那么容易,本题数据极大,这种算法一半分都拿不到,因此我们需要别的优化,首先,我们可以现将每个边按照a的大小进行排序,然后从小到大边枚举边加边,这时dis数组就不必去每次spfa都清空了,而且每次枚举边都可以在原来的图的基础上直接加边,且当前边一定都是能走的边,不必再算上那些不满足要求的边了,可以大大地优化是时间复杂度。
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<map> 7 #include<queue> 8 #include<string> 9 #include<cmath> 10 using namespace std; 11 int n,m,zz,a[500005]; 12 struct ro{ 13 int to,from; 14 int next; 15 int a,b; 16 }road[2000005]; 17 struct no{ 18 int a,b,from,to; 19 }node[200004]; 20 void build(int x,int y,int z,int zx) 21 { 22 zz++; 23 road[zz].from=x; 24 road[zz].to=y; 25 road[zz].next=a[x]; 26 road[zz].a=z; 27 road[zz].b=zx; 28 a[x]=zz; 29 } 30 int dis[500005]; 31 queue<int> q1; 32 bool rd[500005]; 33 int ans=0x7fffffff; 34 void spfa(int x0,int y0,int z,int zx){ 35 rd[x0]=rd[y0]=1; 36 q1.push(x0); 37 q1.push(y0); 38 while(!q1.empty()) 39 { 40 int x=q1.front(); 41 q1.pop(); 42 rd[x]=0; 43 for(int i=a[x];i>0;i=road[i].next) 44 { 45 int y=road[i].to; 46 47 if(dis[y]>max(dis[x],road[i].b)) 48 { 49 dis[y]=max(dis[x],road[i].b); 50 if(!rd[y]) 51 { 52 q1.push(y); 53 rd[y]=1; 54 } 55 } 56 } 57 } 58 int an=0; 59 an=dis[n]; 60 if(an!=dis[0]&&ans>an+z) 61 ans=an+z; 62 } 63 int px(no a,no b) 64 { 65 return a.a<b.a; 66 } 67 int main(){ 68 memset(dis,0x7f,sizeof(dis)); 69 scanf("%d%d",&n,&m); 70 for(int i=1;i<=m;i++) 71 { 72 int x,y,z,zx; 73 scanf("%d%d%d%d",&x,&y,&z,&zx); 74 node[i].a=z; 75 node[i].b=zx; 76 node[i].to=y; 77 node[i].from=x; 78 } 79 sort(node+1,node+m+1,px); 80 dis[1]=0,rd[1]=1; 81 q1.push(1); 82 for(int i=1;i<=m;i++) 83 { 84 int bj=i; 85 build(node[i].from,node[i].to,node[i].a,node[i].b); 86 build(node[i].to,node[i].from,node[i].a,node[i].b); 87 spfa(node[i].from,node[i].to,node[i].a,node[i].b); 88 } 89 if(ans==0x7fffffff) ans=-1; 90 printf("%d\n",ans); 91 // while(1); 92 return 0; 93 }
View Code
转载于:https://www.cnblogs.com/liutianrui/p/7343818.html
[NOI2014]魔法森林题解相关推荐
- [LCT动态树] [NOI2014]魔法森林,[ZJOI2018]历史
[NOI2014] 魔法森林 题目 按照aaa精灵从小到大排序 按顺序插入每一条边 加入第iii条边后的最小代价为a[i]a[i]a[i]加上从111到nnn的所有路径中最大bbb最小的路径代价 维护 ...
- 【bzoj3669】[Noi2014]魔法森林【LCT】
[Noi2014]魔法森林 Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1 ...
- BZOJ 3669: [Noi2014]魔法森林( LCT )
排序搞掉一维, 然后就用LCT维护加边MST. O(NlogN) ------------------------------------------------------------------- ...
- loj2245 [NOI2014]魔法森林 LCT
[NOI2014]魔法森林 链接 loj 思路 a排序,b做动态最小生成树. 把边拆成点就可以了. uoj98.也许lct复杂度写假了..越卡常,越慢 代码 #include <bits/std ...
- 神spfa [Noi2014]魔法森林
问题 G: [Noi2014]魔法森林 时间限制: 30 Sec 内存限制: 512 MB 题目描述 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个 ...
- [BZOJ]3669: [Noi2014]魔法森林 lct
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- 【bzoj 3669】[Noi2014]魔法森林
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- 图论 BZOJ 3669 [Noi2014]魔法森林
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- 题解 P2387 【[NOI2014]魔法森林】
感觉最近做的一些\(LCT\)的题目其实都是不断加边,判环,取较优者. 比如这道题,一句话题解就是按照边权\(A\)排序后用\(LCT\)维护边权\(B\)的最小生成树 比如最小生成树,它用\(LCT ...
最新文章
- android悬浮动态权限,android应用内悬浮窗-自动贴边,不需要权限!
- ACM入门之【字典树/Trie】
- spring架构初学者_完整的厨师和基础架构初学者指南
- gitlab创建分支上传文件_代码管理-gitlab使用方法建议
- 生成pdf设置中文字体出错 \simsun.ttc' with 'Identity-H' is not recognized或者type of font{0} is not recognized
- Shell 脚本:DDNS for aliyun
- iPaste:剪贴板界的一股清流
- 运放的原理、应用、参数和命名规则
- linux搭建raid5命令,命令行操作RAID5
- WPF DataGrid 获取选中 一行 或者 多行
- 2021,前端月薪30K已是白菜价?
- Beyond feelings的 introduction和 chapter1读后感
- 海老师的技术博客: OCA 考试 准备笔记(一): Java Building Blocks
- 解决引入JS中文乱码问题
- lpddr3 阻抗_lpddr3约束规则
- 攻防世界reverse——open-sourse(C语言)
- 荣耀9x是鸿蒙系统吗,好消息!荣耀9X年内将全部升级华为鸿蒙操作系统
- [Web]如何利用Boostrap框架搭建一个还可以的静态网站(五_子页_脱发指南)
- deletepod = restart pod?
- 水很深的深度学习--深度学习概述
热门文章
- 神经科学如何影响人工智能?看DeepMind在NeurIPS2020最新《神经科学人工智能》报告,126页ppt...
- 下一个十年的C位:物联网产业全景解析
- 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...
- 全球工业互联网十大最具成长性技术
- 语音助手再次敲响隐私保护警钟
- 面对大规模AI集成,企业为何迟迟犹豫?
- 谁说女生不适合当程序员?
- 10+小故事揭秘高频「操作系统面试题」
- 老码农揭开行业黑幕:如何编写无法维护的代码
- 《伟大的计算原理》一致谢