火车运输[NOIP 2013 提高组 Day 1]
https://vijos.org/p/1843
本题 kruskal+倍增lca
WA了三次 T_T
总结出一些注意事项:
1. 一定要想明白每一部分是求最大值还是最小值!!!(WA 1)
2. 注意操作顺序,别把要用的变量的数值改没!!!(WA 2)
3. 仔细看题,如本题让“”货车不能到达目的地,输出-1“”,而货车载重为零则应输出0!!!!!!(WA 3)
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
struct edg
{int x;int y;int z;
}edge[50004];
int n,m;
int q;
bool cmp(edg a,edg b)
{return a.z>b.z;
}
int min(int a,int b){return a<b?a:b;}
int father[10004];
int find(int a)
{if(father[a]!=a) father[a]=find(father[a]);return father[a];
}
void unionn(int a,int b)
{father[a]=b;
}
int to[30004],val[30004],nextt[30004],head[10004],cnt;
void add(int a,int b,int c){to[++cnt]=b;val[cnt]=c;nextt[cnt]=head[a];head[a]=cnt;}
int fa[10004][16];
int minn[10004][16];
int deep[10004];
void add_root()
{int v[10004];memset(v,0,sizeof(v));for(int i=1;i<=n;i++){int a=find(i);if(!v[a]){add(n+1,a,0);add(a,n+1,0);v[a]=1;}}
}
int visited[10004];
void dfs(int pos,int pre,int step,int vv)
{visited[pos]=1;fa[pos][0]=pre;deep[pos]=step;minn[pos][0]=vv;for(int i=head[pos];i;i=nextt[i]){if(!visited[to[i]]){dfs(to[i],pos,step+1,val[i]);}}
}
void swap(int &a,int &b){int t=a;a=b;b=t;}
int lca_min(int x,int y)
{int re;int ans=0x7f7f7f7f;if(deep[x]<deep[y])swap(x,y);for(int i=15;i>=0;i--){if(deep[fa[x][i]]>=deep[y]){ans=min(ans,minn[x][i]);x=fa[x][i];}}if(x==y) return ans;for(int i=15;i>=0;i--){if(fa[x][i]!=fa[y][i]){ans=min(ans,minn[x][i]);ans=min(ans,minn[y][i]);x=fa[x][i];y=fa[y][i];}else{re=fa[x][i];}}ans=min(ans,minn[x][0]);ans=min(ans,minn[y][0]);return ans;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].z);edge[i].z++;}sort(edge+1,edge+m+1,cmp);for(int i=1;i<=n;i++) father[i]=i;for(int i=1;i<=m;i++){int a=edge[i].x;int b=edge[i].y;a=find(a);b=find(b);if(a!=b){unionn(a,b);add(edge[i].x,edge[i].y,edge[i].z);add(edge[i].y,edge[i].x,edge[i].z);}}memset(minn,0x3f,sizeof(minn));add_root();dfs(n+1,n+1,0,0);for(int j=1;j<=15;j++){for(int i=1;i<=n;i++){fa[i][j]=fa[fa[i][j-1]][j-1];minn[i][j]=min(minn[i][j-1],minn[fa[i][j-1]][j-1]);}}scanf("%d",&q);for(int i=1;i<=q;i++){int a,b;scanf("%d%d",&a,&b);int ans=lca_min(a,b);if(ans==0) printf("-1\n");else printf("%d\n",ans-1);}return 0;
}
附上几组数据:
/*5 8
5 4 1
4 2 3
5 3 4
3 1 6
5 1 6
4 2 0
4 2 0
1 2 9
5
1 5
4 3
1 4
4 1
3 4*//*5 5
2 5 3
5 3 0
1 2 9
3 2 0
4 2 8
5
3 2
2 1
3 4
5 2
1 2*//*6 8
5 3 7
3 2 3
6 5 2
2 3 6
1 3 6
4 1 3
2 6 9
4 1 1
1
6 4*/
火车运输[NOIP 2013 提高组 Day 1]相关推荐
- NOIP 2013 提高组 货车运输
描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...
- [NOIP 2013提高组]转圈游戏 题解
这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...
- NOIP 2013 提高组初赛 青蛙跳荷叶
现有一只青蛙,初始时在 n 号荷叶上.当它某一时刻在 k 号荷叶上时,下一时刻将等概 率地随机跳到 1, 2, -, k 号荷叶之一上,直至跳到 1 号荷叶为止.当 n = 2 时,平均一共 跳 2 ...
- NOIP 2018提高组复赛C/C++试题及答案详解
NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...
- NOIP 2008 提高组 复赛 message 传字条
NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...
- NOIP 2015 提高组 初赛
NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...
- NOIP 2017 提高组 初赛
NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...
- NOIP 2016 提高组 初赛
NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...
- P1066 2^k进制数 NOIP 2006 提高组 第四题
洛谷蓝题(点击跳转) 提高组 第四题 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的 ...
最新文章
- 00600 ora 关闭oracle_ORA-00600的解决方法?
- android根据项目把文件编译到文件系统中
- python精要(82)-wxpython(3)-静态文本控件与状态栏
- oracle 等频直方图,等频直方图预估结果集行计算公式
- linux系统平均价格,简单认识Linux系统平均负载
- 用数据告诉你,新型冠状病毒传染性有多强?
- 鸿蒙系统存储空间,鸿蒙系统即将上线!看到内存要求后,网友:逼我换手机?...
- 案例:监听域对象的属性变更
- 我不是bug神(JVM问题排查)
- AndroidStudio_开发工具的设置_快捷键设置_编辑器设置---Android原生开发工作笔记72
- python中的编码问题 1
- SpringMVC form:form的一个错误(没有传到前台绑定类)
- VMware虚拟机CentOS7 - VMnet8网络配置及常见问题解决
- 支付宝支付即时到账接口在ThinkPHP商城中的应用(转载)
- bugku misc-旋转跳跃
- 网络直播与营销“合二为一”
- 我很忙,但对你随时有空!
- 计算机英语900句小e,计算机英语100句
- 从补天白帽大会看网络世界那些“挖洞”的人
- 从零开始学java(二十六)--多维数组,多维数组存储表格数据
热门文章
- 菜鸟的数学建模之路(六):层次分析法
- html markdown 互相转换,Vue/Vue中Html和Markdown互相转换/README.md · 撒欢大魔王/LearningNotes - Gitee.com...
- stm32小车红外对管的循迹
- Flash几乎每天一个Bug,Adobe该放弃了
- Mybatis-Plus引入后出错的原因
- 商家使用会员卡有什么好处?手机app即可办理实体会员卡!
- java实现第七届蓝桥杯平方末尾
- 电子产品销售数据分析
- 为什么网页无法正常显示
- Unity Failed to load ‘Sssets/Plugins/xxx.dll with error 找不到指定的模块