【NOI2014】魔法森林
题面太鬼,这是链接
首先,此题正解LCT。。。。。。先%%%一发,不会LCT
然后玄学解法是Superfast。。。
把边按A守护精灵升序,用Superfast记录仪B守护精灵
然后不断加边,每加一条边就松弛两个端点然后记录答案(答案==这条边A守护精灵数量(因为是最大的)+1~n的最短距离(距离是B守护精灵数)),然后加完边答案就统计出来了。。。
然后就能AC此题。。。。。。。。。。。。。。。。。
算法正确性的证明:不会
1 // It is made by XZZ 2 #include<cstdio> 3 #include<algorithm> 4 #include<queue> 5 using namespace std; 6 #define rep(a,b,c) for(rg int a=b;a<=c;a++) 7 #define drep(a,b,c) for(rg int a=b;a>=c;a--) 8 #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a]) 9 #define il inline 10 #define rg register 11 #define vd void 12 #define t (dis[i]) 13 typedef long long ll; 14 il int gi(){ 15 rg int x=0;rg char ch=getchar(); 16 while(ch<'0'||ch>'9')ch=getchar(); 17 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); 18 return x; 19 } 20 #define X E[i].x 21 #define Y E[i].y 22 #define A E[i].a 23 #define B E[i].b 24 #define inf 123456 25 struct edge{int x,y,a,b;}E[100001]; 26 bool operator < (edge a,edge b){return a.a<b.a;} 27 const int maxn=50002,maxm=200011; 28 int fir[maxn],dis[maxm],nxt[maxm],a[maxm],b[maxm],id=0; 29 il vd add(int fr,int to,int aa,int bb){ 30 nxt[++id]=fir[fr],fir[fr]=id,dis[id]=to,a[id]=aa,b[id]=bb; 31 } 32 queue<int>que;bool inque[maxn]={0}; 33 int Dis[maxn],n; 34 il int spfa(){ 35 while(!que.empty()){ 36 int now=que.front(); 37 erep(i,now) 38 if(Dis[t]>max(Dis[now],b[i])){ 39 Dis[t]=max(Dis[now],b[i]); 40 if(!inque[t])que.push(t),inque[t]=1; 41 } 42 que.pop(),inque[now]=0; 43 }return Dis[n]; 44 } 45 int main(){ 46 n=gi(); 47 rg int m=gi(),ans=inf; 48 rep(i,1,m)X=gi(),Y=gi(),A=gi(),B=gi(); 49 sort(E+1,E+m+1); 50 rep(i,2,n)Dis[i]=inf; 51 rep(i,1,m) 52 add(X,Y,A,B),add(Y,X,A,B), 53 que.push(X),que.push(Y), 54 inque[X]=inque[Y]=1,ans=min(ans,spfa()+A); 55 if(ans==inf)puts("-1"); 56 else printf("%d\n",ans); 57 return 0; 58 }
View Code
转载于:https://www.cnblogs.com/xzz_233/p/7217004.html
【NOI2014】魔法森林相关推荐
- BZOJ 3669: [Noi2014]魔法森林( LCT )
排序搞掉一维, 然后就用LCT维护加边MST. O(NlogN) ------------------------------------------------------------------- ...
- [LCT动态树] [NOI2014]魔法森林,[ZJOI2018]历史
[NOI2014] 魔法森林 题目 按照aaa精灵从小到大排序 按顺序插入每一条边 加入第iii条边后的最小代价为a[i]a[i]a[i]加上从111到nnn的所有路径中最大bbb最小的路径代价 维护 ...
- loj2245 [NOI2014]魔法森林 LCT
[NOI2014]魔法森林 链接 loj 思路 a排序,b做动态最小生成树. 把边拆成点就可以了. uoj98.也许lct复杂度写假了..越卡常,越慢 代码 #include <bits/std ...
- 【bzoj3669】[Noi2014]魔法森林【LCT】
[Noi2014]魔法森林 Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1 ...
- 神spfa [Noi2014]魔法森林
问题 G: [Noi2014]魔法森林 时间限制: 30 Sec 内存限制: 512 MB 题目描述 为了得到书法大家的真传,小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同学在号节 ...
- [BZOJ]3669: [Noi2014]魔法森林 lct
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- [NOI2014]魔法森林题解
这道题正解其实是LCT,然而貌似SPFA也可以成功水过,所以根本不知道LCT的我只能说SPFA了. 这道题最大的限制是两种精灵就意味着一条道可能有两个权值,因此我们需要去将其中一个固定,然后再推另一个 ...
- P2387 [NOI2014]魔法森林
传送门 如果一条边只要考虑 $a$ 的限制,那么显然最小生成树 但是现在有 $a,b$ 两个限制,所以考虑按 $a$ 从小到大枚举边,动态维护 $b$ 的最小生成树 考虑新加入的一条边 $x,y$ , ...
最新文章
- 求数组当中子数组最大和
- intellij idea 如何一键清除所有断点
- 中国SaaS死或生之五:目标、方法、钱,一个都不能少
- iOS多线程开发(三)---Run Loop(一)
- vb.net2019-上传文件
- C++中逆向迭代器的说明及使用
- 机器学习部分国内牛人
- GIS工具篇(一):2000大地坐标系转换指南
- LeetCode两数相除java
- C语言小知识---递归函数的使用
- block,inline和inline-block
- PHPExcel基本使用(2) 导入图片
- 【毕业求职季】-听说你想去大厂看学妹,带你看看字节广告运营岗面试长啥样?
- 使用ENVI对遥感图像进行图像镶嵌、图像裁剪。
- 2017年网易校招Java面试题
- JAVA常用加密解密算法Encryption and decryption
- FlashFXP v4.4.2.2019 绿色版
- 我们使用 Kafka 生产者在发消息的时候我们关注什么(Python 客户端 1.01 broker)...
- python批量修改图片的分辨率dpi值
- [2022 强网杯] devnull 复现
热门文章
- python条件语句代码例子_Python 炫技操作:条件语句的七种写法
- 第一章节 c#面向对象
- leetcode 78.子集 dfs解法
- 动态规划-----(思路详解)
- ZOJ 3993 2017CCPC秦皇岛 M:Safest Buildings
- SpringBoot--自动装配原理详解及应用之Conditional注解
- [Python] 将两个列表合并为字典
- [Python] * 和 ** 的用法
- AD19原理图背景栅格去掉(改为纯色)
- theadClasses设置Bootstrap Table表头样式