**

洛谷oj:P1196银河英雄传说

**

#题目描述

#并查集的题
#注意并查集就是只能一次更新一个的位置信息 如果更新一段就没有意义了

#知识点
并查集

#代码
第1次 更新一段了 就没有意义了 超时了

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<stdio.h>
using namespace std;
#define Maxn 30020
int father[Maxn],next[Maxn],num[Maxn];//  next 下一个的编号  num 舰队中飞船的数量
void init()
{for(int i=1;i<=30000;i++){father[i] = i;next[i] = -1;num[i] = 1;}
}
int Find(int x)
{if(x != father[x]){father[x] = Find(father[x]);}return father[x];
}
void add(int rx,int ry)
{int i;int cnt = num[ry];next[cnt] = rx;///num[ry] = num[rx] + num[ry];for(i = ry;num[ry]!=1;i = next[i])/// 注意num里面放根节点就是舰队飞船数量 放其他就是所在位置{num[i] += num[rx];}num[i] += num[rx];
}
void Union(int rx,int ry)
{if(rx == ry){return ;}else{father[rx] = ry;add(rx,ry);#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<stdio.h>
using namespace std;
#define Maxn 30020
int father[Maxn],next[Maxn],num[Maxn];//  next 下一个的编号  num 舰队中飞船的数量
void init()
{for(int i=1;i<=30000;i++){father[i] = i;next[i] = -1;num[i] = 1;}
}
int Find(int x)
{if(x != father[x]){father[x] = Find(father[x]);}return father[x];
}
void add(int rx,int ry)
{int i;int cnt = num[ry];next[cnt] = rx;///num[ry] = num[rx] + num[ry];for(i = ry;num[ry]!=1;i = next[i])/// 注意num里面放根节点就是舰队飞船数量 放其他就是所在位置{num[i] += num[rx];}num[i] += num[rx];
}
void Union(int rx,int ry)
{if(rx == ry){return ;}else{father[rx] = ry;add(rx,ry);}
}
int main()
{int t,a,b;char temp;init();cin >>t;while(t--){cin >> temp >> a >> b;int ra = Find(a);int rb = Find(b);if(temp == 'M'){Union(ra,rb);}else{if(ra != rb){cout << "-1" <<endl;}else{if(num[a] >= num[b]){cout << num[a]-num[b]-1 <<endl;}else{cout << num[b]-num[a]-1 <<endl;}}}}return 0;
}}
}
int main()
{int t,a,b;char temp;init();cin >>t;while(t--){cin >> temp >> a >> b;int ra = Find(a);int rb = Find(b);if(temp == 'M'){Union(ra,rb);}else{if(ra != rb){cout << "-1" <<endl;}else{if(num[a] >= num[b]){cout << num[a]-num[b]-1 <<endl;}else{cout << num[b]-num[a]-1 <<endl;}}}}return 0;
}

第二次 将更新的大头调到Find函数中 故而可行了

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<iostream>
#include<stdio.h>
using namespace std;
#define Maxn 30020
int father[Maxn],Front[Maxn],num[Maxn];//! 并查集数组  前缀和数组(求到根节点的距离 不一定是舰队头)  飞船数量数组
void init()
{for(int i=1;i<=30000;i++){father[i] = i;Front[i] = 0;num[i] = 1;}return ;
}
int Find(int x)
{if(x == father[x])return x;int cn = Find(father[x]);Front[x] += Front[father[x]];///要的是没有更新的那个位置  这个点到原根节点的距离 加上 原根节点到现根节点的距离 是现在节点到现根节点(战舰头)的距离return father[x] = cn;
}
void Union(int x,int y)
{father[x] = y;Front[x] += num[y];num[y] += num[x];num[x] = 0;
}
int main()
{int t,a,b,ra,rb;char temp;init();cin >>t;while(t--){cin >> temp >> a >> b;ra = Find(a);rb = Find(b);if(temp == 'M'){Union(ra,rb);}else{if(ra != rb){cout << "-1" <<endl;}else{cout << abs(Front[a] - Front[b])-1 <<endl;}}}return 0;
}

#总结
题目逻辑不难 但要优化 要思考如何才能更好的优化 优化时间卡的很死

#洛谷oj:P1196银河英雄传说相关推荐

  1. 洛谷 P1196 银河英雄传说

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  2. 洛谷P1196 银河英雄传说

    题目大意: 一些战舰,初始时每个都在自己编号对应的队列中,现在有两个操作 : M a b:把a战舰所在的队列顺序不变的接到b战舰所在队列尾部 C a b:询问a b在同一个队列之间的距离 如果a b不 ...

  3. #洛谷oj:P1525 [NOIP2010 提高组] 关押罪犯

    洛谷oj:P1525 [NOIP2010 提高组] 关押罪犯 #题目描述 #一看很明显是贪心算法 加排序 因为 这个中间最大值的那一对肯定是不会在一起的 从大到小来看 所有点对都尽量不要在一个监狱 # ...

  4. 洛谷oj题单【入门2】分支结构-入门难度(Java)

    洛谷oj题单[入门2]分支结构-入门难度(Java) 来源:https://www.luogu.com.cn/training/101#problems P5709 [深基2.习6]Apples Pr ...

  5. 洛谷OJ 入门与面试 B2001-B2148 题解

    洛谷OJ 入门与面试 B2001-B2148 链接:https://pan.baidu.com/s/1cMRv6SBjL_sehYj7oM8gkw 提取码:tel3 B2001 入门测试题目 #inc ...

  6. 洛谷OJ上的A+B花(zhuang)式(bi)解法

    转眼间快到了8月,一想自己都毕业好久了,很怀念曾经在各大OJ上刷题的时光,今天无意在一个算法群里看到最近有个叫洛谷的oj网站貌似蛮火的,于是注册了一个下进去看一看,顺手打开了A+B problem,然 ...

  7. 【NOIP2002】银河英雄传说

    本题在洛谷上的链接:https://www.luogu.org/problemnew/show/P1196 又是一道带权并查集的题,没太多难度,就是吧... 为了提高代码能力,换了一种更松散的代码风格 ...

  8. 【洛谷OJ C++】洛谷题单100 入门1顺序结构 题解及学习笔记

    洛谷平台题单100链接:https://www.luogu.com.cn/training/100#problems 目录 学习笔记: P1001 A+B Problem P1000 超级玛丽游戏 P ...

  9. 【洛谷OJ C++】洛谷题单101 入门2分支结构 题解及学习笔记

    洛谷题单101链接:https://www.luogu.com.cn/training/101#problems 笔记及题解目录: 学习笔记: P5710 [深基3.例2]数的性质 P5711 [深基 ...

  10. 并查集:P1196 [NOI2002] 银河英雄传说

    传送门 带权并查集最棒了 dep记录深度,size记录集合大小 转移见代码 #include<cstdio> #include<algorithm> #include<i ...

最新文章

  1. delphi中关于时间差的实例
  2. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
  3. 「Ubuntu」系统常用命令
  4. 阿里P8亲自讲解!java声明类的语法格式
  5. LeetCode 2212. 射箭比赛中的最大得分(状态枚举)
  6. matlab 可变参数与默认参数设置
  7. 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证....
  8. 大话卷积神经网络(CNN)
  9. linux 查看kernel log,Linux Kernel Log
  10. adb工具的安装与常用命令
  11. 知识笔记 - sekiro RPC框架的安装与简单使用
  12. 【MATLAB】用地图表白:绘制Bonne投影下的世界地图
  13. 【报错】arXiv上传文章出现XXX.sty not found
  14. 【人工智能】人类大脑中的神经元群体是如何相互作用,进而产生感知和行为的?
  15. Python——矩阵求逆、矩阵的转置
  16. 单个页面多个按钮调用同一个弹窗,和滚屏展示效果,关闭后,5秒自动弹出滚屏展示!
  17. python:重建二叉树
  18. STK运载火箭发射仿真
  19. 中兴JAVA直板手机_中国移动定制中兴直板3G手机U210图赏
  20. Hive数值计算函数

热门文章

  1. 虚拟机系统iso镜像下载_[原版镜像]macOS Mojave 10.14.1 原版 iso 镜像- 虚拟机专用
  2. Java入门到精通全教程
  3. cadnaa噪声分析测试软件,德国Cadna/A环境噪声模拟软件系统介绍
  4. Matlab——噪声的检测和处理实验
  5. App专项测试测试有哪些?
  6. python post请求实例_Python post请求实现代码实例
  7. Boost Graph Library
  8. 程序员的电脑文件管理技巧
  9. Unity3D 汉化
  10. 流水灯c语言代码大全,单片机闪烁灯流水灯汇编代码大全