万岛之国
来源:互联网 发布:微信淘宝客论坛 编辑:程序博客网 时间:2024/04/30 07:29
6 万岛之国
Time Limit:6000MS Memory Limit:65535K
题型: 编程题 语言: 无限制
描述
印度尼西亚被称为万岛之国,但随着全球变暖,海平面逐渐下降,一些岛屿由露出海面的陆地连接起来地理部门每隔一段时间,就会发布哪个岛屿与哪个岛屿之间的陆地连起来了,格式如下:Y 1 5Y代表一条两岛屿陆地连起来了的信息,1和5分别代表两个岛屿编号当地官员时刻关心万岛之国,究竟岛屿还有多少个(连上的岛就只算一个了)查询格式如下:QQ代表查询当前有多少个岛一开始时,每个岛都是被海水分隔的,请编程实现上述处理要求
输入格式
第一行一个数N(1<=N<=1,000,000),表示岛的编号分别为1到N第二行一个数M(1<=100,000),表示岛屿连上的信息(或查询请求)的总数此后M行,一行一条岛屿连上的信息或查询请求
输出格式
每个查询请求,输出当前岛屿数量
输入样例
109QY 1 5QY 2 7QY 7 1QY 2 5Q
输出样例
109877
#include<iostream>//这个题 主要是对并查集的 考察#include<cstdlib>#include <cstdio>using namespace std;int Find(int T[],int &i){ int depeth=1; // 并查树的深度 用于进行优化 for(;T[i]!=i;i=T[i],depeth++) ; return depeth; //返回深度 并且i 就是 最上层节点的 下标}void Union(int T[]) { int p,q; cin>>p>>q; // 把下标为 p q 的连接在一块 int a,b; // 为 p ,q 树集的深度 a=Find(T,p); b=Find(T,q); a>b? (T[q]=T[p]):( T[p]=T[q]) ;//合并两个树 使合成的树 深度最小}bool Connected(int T[],int p,int q){ Find(T,p)==Find(T,q); //两个节点的树根 是否相同 来判断 是否为一个集合 if(T[p]==T[q]) return 1; else return 0;}int Count(int T[],int n){ int sum=0; for(int i=1;i<=n;i++) if(T[i]==i) sum++; //遍历所有的节点 有几个更节点 return sum;}int main(){ //freopen("a","r",stdin); int n,m; cin>>n>>m; int *T=(int *)malloc((n+1)*sizeof(int)); for(int i=1;i<=n;i++) T[i]=i; char ch; while(m--) { cin>>ch; switch(ch) { case 'Q' : cout<<Count(T,n)<<endl;break; case 'Y' : Union(T);break; } }}
阅读全文
0 0
- 万岛之国
- 快排小试之万数排序
- 五、万里之行
- 伊万的复用之见解
- 万园之园昔日辉煌
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王 – 抽象
- 万王之王3即将推出
- 日薪50万 打工之王”唐骏
- 大连工商代办之万晟代办
- 目标年薪30万之技能
- 记录之----访问破10万
- PHP性能之语言性能优化:安装VLD扩展——检测性能
- jeecg快速开发平台初体验
- java自动装箱和拆箱
- Problem B: AB*C+A=y的方程
- Game
- 万岛之国
- [安卓]Cursor用法
- win10下SecureCRT SSH连接慢
- Maven 项目打包需要注意到的那点事儿
- 2017 计蒜之道 复赛 B. Windows 画图 坐标描点
- PL/SQL 其它
- 定时器
- 解析死锁问题
- Android跨进程事件注入 Injecting to another application requires INJECT_EVENTS permission