首先表示对C++读入读出问题复杂程度的敬畏,看了好多没讲明白的,本题用cin竟然过不了评测,搞scanf的读入搞了好久....

本题确实是一道经典的并查集题型,不多讲,拿来练练手用的(其中经历很惨)

用pre[i]表示i到其父节点f[i]之间排几个(父节点算1个)

f[i]表示i的父节点

num[i]表示i的队伍中一共有多少人

大致即 利用父节点与该点距离进行迭代的过程,即pre[x]=pre[x]+pre[f[x]]; 然后每次调整队伍时只要将父节点的位置搞清楚了,其他点都可以根据与父节点关系计算出来

/*看来对于c++这门语言见解不够,或者说c++确实不好用*/
#include<iostream>
#include<cstdio>
#include<cmath>
int f[30000],pre[30000],num[30000];
using namespace std;
int find(int x){
if (f[x]==x) return(x);
find(f[x]);
pre[x]+=pre[f[x]];
f[x]=f[f[x]];
return(f[x]);
}
int main()
{
int n,i,j,k,a,b,fa,fb;
char c;
cin>>n;
for(k=1;k<=30000;k++){
f[k]=k;
num[k]=1;
}
for(k=1;k<=n;k++){
while (getchar()!='\n');//读入问题至今觉得c++的cin和scanf都相当不好用,可能有的作用不知道,但是没找到真正讲得明白其原理的文章; 只能表示pascal的read,readln的强大
scanf("%c",&c);
scanf("%d%d",&a,&b);
fa=find(a);fb=find(b);
if(c=='M'){
f[fa]=fb;
pre[fa]=num[fb];
num[fb]+=num[fa];
}
if(c=='C'){
if(fa==fb){
printf("%d\n",((int)abs(pre[a]-pre[b]))-1);//很奇怪的地方,若abs不用int竟然abs返回值变成0,不知为什么?
}else printf("-1\n");
}
}
return 0;
}

noi2002银河英雄传说(并查集)的更多相关文章

  1. 洛谷P1196[NOI2002]银河英雄传说-并查集扩展

    银河英雄传说 题意:在并查集的基础上,还要求出同一集合的两个点的距离 这道题用并查集自己是知道的,但是竟然可以这么骚的操作. 下面转自大佬的查详细题解 初见这道题,首先想到的方法当然是直接模拟,模拟每 ...

  2. Luogu P1196 [NOI2002]银河英雄传说 | 并查集

    题目链接 并查集,具体看注释. #include<iostream> #include<cstdio> #include<cmath> using namespac ...

  3. codevs 1540 银河英雄传说 并查集

    1540 银河英雄传说 2002年NOI全国竞赛  时间限制: 1 s  空间限制: 256000 KB       题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星, ...

  4. H20的题——[noip2003]银河英雄传(并查集)

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

  5. luogu1196 银河英雄传说 (并查集)

    并查集,不仅记fa,还记与fa的距离,还记根对应的尾节点 路径压缩的时候更新那个距离就行了 #include<bits/stdc++.h> #define pa pair<int,i ...

  6. 【NOI2002】银河英雄传说(并查集)

    [NOI2002]银河英雄传说 题面 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军 ...

  7. 【洛谷】P1196 [NOI2002]银河英雄传说【带权并查集】

    P1196 [NOI2002]银河英雄传说 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的 ...

  8. NOI2002银河英雄传说-带权并查集

    [NOI2002]银河英雄传说-带权并查集 luogu P1196 题目描述 Description: 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年, ...

  9. P1196 [NOI2002]银河英雄传说(并查集)

    P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...

随机推荐

  1. ASP.NET Web – 状态管理

    状态类型 客户端或服务器资源 有效时间 ViewState 客户端 只在一个页面中 Cookie 客户端 关闭浏览器时会删除临时cookie,永久cookie存储在客户系统的磁盘上 Session 服 ...

  2. C# Windows - 创建控件

    VS提供了一个项目类型Windows Control Library,使用它可以创建自己的控件. 可以开发两种不同类型的自定义控件: 用户或组合控件:这种控件是根据现有控件的功能创建一个新控件.这类控 ...

  3. 【软件工程-Teamwork 3】团队角色分配和团队贡献分分配规则

    Part 1 团队角色分配 1.人员分配概要: Project Manager:1名 / Developer:4名 / Test: 1名 2.具体人员分配及职责: Project Manager(PM ...

  4. OC中的点语法,成员变量的作用域

    点语法 点语法本质是函数的调用,不是像java中那样,是用来访问成员变量的:oc中访问成员变量是用 -> 访问的: Person *p = [Person new]; p.age = 10; / ...

  5. [原]android不支持命名的semaphore

    之前sem_open在iOS上, 创建命名的semaphore没有问题 (iOS不支持匿名的semaphore), 但是现在Android平台的sem_open时候报错,返回ENOSYS. 命名的se ...

  6. UVALive 3977

    直接搜索,简单题: #include<cstdio> #include<cstring> #include<cmath> #include<algorithm ...

  7. jsp bean标签

    jsp中存在一个奇奇怪怪的bean标签. 例如 现在在java包中定义一个类test2 package bean; public class test { private int number; pu ...

  8. Open multiple Eclipse workspaces on the Mac

    This seems to be the supported native method in OS X: cd /Applications/eclipse/ open -n Eclipse.app ...

  9. hdu 3923 Invoker

    完全是套用polya模版…… ;}

  10. floodlight 中两个互相矛盾的地方

    floodlight中,添加防火墙规则,0表示最高优先级,数字越大,优先级越低;但是在StaticFlowPusher中写flow的时候,0表示最低优先级,数字越大,优先级越高,32767为最高. f ...