Codevs1540银河英雄传说
来源:互联网 发布:linux utf8转gbk乱码 编辑:程序博客网 时间:2024/04/28 15:48
http://codevs.cn/problem/1540/
思路
网络上许多资料将此题归为了加权并查集…但事实上只是从哪一方面理解的差别,也可以谓在普通并查集的基础上记录各元素相对深度,和各队列的长度而已。
要加深对并查集的理解
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int t,a,b;int fa[100010],pos[100010],sum[100010];//pos相对深度,sum队列长度 char p;int find(int x){ if(x!=fa[x])//已经确定相对深度的点无需再次更新,可进行路径压缩 { int k=find(fa[x]); pos[x]+=pos[fa[x]]; fa[x]=k; } return fa[x];}int main(){ scanf("%d\n",&t); for(int i=1;i<=10;i++) fa[i]=i,sum[i]=1;//pos无初值(起始)---根节点pos值为0(过程)使得重复find()不会使pos值增加 for(int i=1;i<=t;i++) { scanf("%c %d %d\n",&p,&a,&b);//出色的操作 int u=find(a);//仅查询时处理深度 int v=find(b); if(p=='M') { fa[u]=v; pos[u]=sum[v]; sum[v]+=sum[u]; } if(p=='C') { if(u==v) printf("%d\n",abs(pos[a]-pos[b])-1);//pos值从0开始 else printf("-1\n"); } } return 0;}
加权并查集的形式:http://www.studyai.com/article/1383d28f
阅读全文
1 0
- 【codevs1540】 银河英雄传说
- [codevs1540]银河英雄传说
- Codevs1540银河英雄传说
- 【CodeVS1540】【Vijos1443】【NOI2002】银河英雄传说
- codevs1540 银河英雄传说(NOI 2002)
- 【codevs1540】银河英雄传说,以前屯着没做的并查集
- TYVJ 银河英雄传说
- 【noi2002】银河英雄传说
- Noi2002银河英雄传说
- 【NOI2002】银河英雄传说
- 银河英雄传说
- 【u010】银河英雄传说
- 1540 银河英雄传说
- P1196 银河英雄传说
- [P1196]银河英雄传说
- 银河英雄传说
- NOI2002 银河英雄传说
- NOI2002 银河英雄传说
- 文件的归档 压缩 传输命令
- Ubuntu列出所有文件及其文件夹
- Maven和Gradle对比
- 落后的下场
- 泛化之美--C++11可变模版参数的妙用
- Codevs1540银河英雄传说
- AndroidStudio导出jar包和aar包
- ArrayList源码简析
- 前端上传图片预览
- jsp分页及原理
- AD15 快捷键
- composer windows的安装
- python对文件的操作
- 使用Spring Cloud微服务框架进行多个微服务整合时出现No converter found for return value of type:xxx异常信息