CODJ 1070 秋实大哥打游戏 并查集
有N个独立的点,标号为1,2,3,…N。现在要把他们连接起来,每次选取x和y两个点,x是它所处集合的中心,y不一定是它所处集合的中心,然后在xy间连一条长度为|x-y|mod1000的边。然后把这两个集合合并起来,新集合的中心是原y所处的集合的中心。有两种操作,I x y表示选取x和y合并。E x表示查询x到它所处集合中心的距离。O表示结束。
并查集的套路,但是在查询的时候,路径压缩的时候,更新点到集合中心的距离即可。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <string>
using namespace std;
#define maxn 100005
int set[maxn];
//int size[maxn];//结点数
int dis[maxn];
//int center[maxn];
int N;
void init_set()
{memset(dis, 0, sizeof(int)*maxn);for (int i = 0; i<maxn; ++i){set[i] = i;//size[i] = 1;//center[i] = 1;}
}
int findSet(int x)//路径压缩
{if (x == set[x])return x;else{/*int fx = set[x];dis[x] += dis[fx];set[x] = set[fx];dis[x] += dis[fx];*/int fx = set[x];int rx = findSet(fx);dis[x] += dis[fx];set[x] = rx;return rx;}
}
void unionSet(int x, int y)
{//int fx = findSet(x);int fy = findSet(y);if (fy == x)return;set[x] = fy;dis[x] = dis[x] + abs(x - y) % 1000 + dis[y];
}
int main()
{//freopen("input.txt", "r", stdin);scanf("%d", &N);init_set();char cmd[30];memset(cmd, 0, sizeof(char) * 30);while (gets(cmd)){if (cmd[0] == 'O')break;else if (cmd[0] == 'I'){int x = 0, y = 0;int i;for (i = 1; !(cmd[i] >= '0'&&cmd[i] <= '9'); ++i);for (; cmd[i] >= '0'&&cmd[i] <= '9'; ++i)x = x * 10 + cmd[i] - '0';for (; !(cmd[i] >= '0'&&cmd[i] <= '9'); ++i);for (; cmd[i] >= '0'&&cmd[i] <= '9'; ++i)y = y * 10 + cmd[i] - '0';unionSet(x, y);}else if (cmd[0] == 'E'){int x = 0, i;for (i = 1; !(cmd[i] >= '0'&&cmd[i] <= '9'); ++i);for (; cmd[i] >= '0'&&cmd[i] <= '9'; ++i)x = x * 10 + cmd[i] - '0';findSet(x);printf("%d\n", dis[x]);}memset(cmd, 0, sizeof(char) * 30);}//system("pause");//while (1);return 0;
}
CODJ 1070 秋实大哥打游戏 并查集相关推荐
- CDOJ 1070 秋实大哥打游戏 带权并查集
链接 F - 秋实大哥打游戏 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit ...
- cdoj 1070 秋实大哥打游戏 带权并查集
题目链接: http://acm.uestc.edu.cn/#/problem/show/1070 题意: 题解: 带权并查集 每次往上更新的时候,顺便把边权更新了就好 记住得路径压缩 代码: 1 # ...
- 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
秋实大哥打游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- E - 秋实大哥与战争
秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- [UESTC 1061]秋实大哥与战争
男儿何不带吴钩,收取关山五十州. 征战天下是秋实大哥一生的梦想,所以今天他又在练习一个对战游戏. 秋实大哥命令所有士兵从左到右排成了一行来抵挡敌人的攻击. 敌方每一次会攻击一个士兵,这个士兵就会阵亡, ...
- 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询...
D - 秋实大哥与战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...
- cdoj 2015数据结构专题:D - 秋实大哥与战争
男儿何不带吴钩,收取关山五十州. 征战天下是秋实大哥一生的梦想,所以今天他又在练习一个对战游戏. 秋实大哥命令所有士兵从左到右排成了一行来抵挡敌人的攻击. 敌方每一次会攻击一个士兵,这个士兵就会阵亡, ...
- UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)
秋实大哥与花 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- uestc 1073 秋实大哥与线段树 Label:线段树
秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) "学 ...
最新文章
- IDC与村村乐合作服务中国农村市场
- python中的zip()函数和map()函数
- matlab中svd函数用法总结
- ACM技巧 - O(1)快速乘(玄学) 总结
- 关于C#监视剪贴板信息
- svn外网虚拟服务器设置,svn虚拟服务器设置路由器设置
- 每天生成 45 亿字符的 GPT-3,真能取代人工?
- 【java读书笔记】——java开篇宏观把控 + HelloWorld
- 有效管理云计算成本的多个措施
- 您实际上可以通过这些YouTube视频了解GPT-3
- Web项目部署到阿里云
- Win10访问不了Samba网络共享的原因以及解决办法
- 《佛密诸事》第二章 宇宙诸现象
- 英语影视台词---无敌破坏王2大脑互联网(2)(我完全被震惊了)
- 十六进制数据的CRC16校验码自写软件
- Python中的取模运算方法
- varbinary 转换成 varchar
- 《游梦人·诗的诞生》
- RDKit | 基于RDKit进行构象搜索:构型异构体生成和MMFF聚类
- 澳禁止华为参与5G网络建设;锤子将编写自己的OS;国产处理器兆芯可运行Windows,已试制出Intel i5级处理器丨Q新闻...