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]相关推荐

  1. NOIP 2013 提高组 货车运输

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  2. [NOIP 2013提高组]转圈游戏 题解

    这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...

  3. NOIP 2013 提高组初赛 青蛙跳荷叶

    现有一只青蛙,初始时在 n 号荷叶上.当它某一时刻在 k 号荷叶上时,下一时刻将等概 率地随机跳到 1, 2, -, k 号荷叶之一上,直至跳到 1 号荷叶为止.当 n = 2 时,平均一共 跳 2 ...

  4. NOIP 2018提高组复赛C/C++试题及答案详解

    NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...

  5. NOIP 2008 提高组 复赛 message 传字条

    NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...

  6. NOIP 2015 提高组 初赛

    NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...

  7. NOIP 2017 提高组 初赛

    NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...

  8. NOIP 2016 提高组 初赛

    NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...

  9. P1066 2^k进制数 NOIP 2006 提高组 第四题

    洛谷蓝题(点击跳转) 提高组 第四题 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的 ...

最新文章

  1. 00600 ora 关闭oracle_ORA-00600的解决方法?
  2. android根据项目把文件编译到文件系统中
  3. python精要(82)-wxpython(3)-静态文本控件与状态栏
  4. oracle 等频直方图,等频直方图预估结果集行计算公式
  5. linux系统平均价格,简单认识Linux系统平均负载
  6. 用数据告诉你,新型冠状病毒传染性有多强?
  7. 鸿蒙系统存储空间,鸿蒙系统即将上线!看到内存要求后,网友:逼我换手机?...
  8. 案例:监听域对象的属性变更
  9. 我不是bug神(JVM问题排查)
  10. AndroidStudio_开发工具的设置_快捷键设置_编辑器设置---Android原生开发工作笔记72
  11. python中的编码问题 1
  12. SpringMVC form:form的一个错误(没有传到前台绑定类)
  13. VMware虚拟机CentOS7 - VMnet8网络配置及常见问题解决
  14. 支付宝支付即时到账接口在ThinkPHP商城中的应用(转载)
  15. bugku misc-旋转跳跃
  16. 网络直播与营销“合二为一”
  17. 我很忙,但对你随时有空!
  18. 计算机英语900句小e,计算机英语100句
  19. 从补天白帽大会看网络世界那些“挖洞”的人
  20. 从零开始学java(二十六)--多维数组,多维数组存储表格数据

热门文章

  1. 菜鸟的数学建模之路(六):层次分析法
  2. html markdown 互相转换,Vue/Vue中Html和Markdown互相转换/README.md · 撒欢大魔王/LearningNotes - Gitee.com...
  3. stm32小车红外对管的循迹
  4. Flash几乎每天一个Bug,Adobe该放弃了
  5. Mybatis-Plus引入后出错的原因
  6. 商家使用会员卡有什么好处?手机app即可办理实体会员卡!
  7. java实现第七届蓝桥杯平方末尾
  8. 电子产品销售数据分析
  9. 为什么网页无法正常显示
  10. Unity Failed to load ‘Sssets/Plugins/xxx.dll with error 找不到指定的模块