【poj 1962】Corporative Network(图论--带权并查集 模版题)
P.S.我不想看英文原题的,但是看网上题解的题意看得我 炒鸡辛苦&一脸懵 +_+,打这模版题的代码也纠结至极了......不得已只能自己翻译了QwQ 。
题意:有一个公司有N个企业,分成几个网络,分别从各个网络中选一个机器设置为中心机。下面有2种操作:1.查询当前时间机器x到其所在网络的中心机的距离;2.设置中心机x与机器y相连,距离为abs(x-y)%1000,x所在的网络的中心机变为y所在网络的中心机。
解法:带权并查集。可以把中心机转换为一个集合(树)的根节点,求距离就是求点到根节点的距离。于是我们就做并查集的同时维护一个f[i]表示点 i 到其根节点的距离。
请画树理解代码,图解可参考:【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6
7 const int N=20010,mod=1000;
8 int f[N],fa[N];
9 char s[3];
10 int n;
11
12 int mabs(int x) {return x>0?x:-x;}
13 int ffind(int x)
14 {
15 if (fa[x]!=x)
16 {
17 int fx=fa[x];
18 fa[x]=ffind(fx);//更新了fx
19 f[x]+=f[fx];//注意:题意不是全部都取模,只是新连接的长度取模
20 }
21 return fa[x];
22 }
23 int main()
24 {
25 int T,x,y;
26 scanf("%d",&T);
27 while (T--)
28 {
29 scanf("%d",&n);
30 for (int i=1;i<=n;i++) fa[i]=i,f[i]=0;
31 while (1)
32 {
33 scanf("%s",s);
34 if (s[0]=='O') break;
35 if (s[0]=='E')
36 {
37 scanf("%d",&x);
38 ffind(x);//更新
39 printf("%d\n",f[x]);
40 }
41 else
42 {
43 scanf("%d%d",&x,&y);
44 fa[x]=y;//直接相连
45 f[x]=mabs(x-y)%mod;
46 }
47 }
48 }
49 return 0;
50 }
【poj 1962】Corporative Network(图论--带权并查集 模版题)的更多相关文章
- POJ1962:Corporative Network【带权并查集】
		
<题目链接> 题目大意: n个节点,若干次询问,I x y表示从x连一条边到y,权值为|x-y|%1000:E x表示询问x到x所指向的终点的距离. 解题分析: 与普通的带权并查集类似 ...
 - UVALive 3027 	Corporative Network (带权并查集)
		
题意: 有 n 个节点,初始时每个节点的父节点都不存在,你的任务是执行一次 I 操作 和 E 操作,含义如下: I u v : 把节点 u 的父节点设为 v ,距离为| u - v | ...
 - 【poj 1988】Cube Stacking(图论--带权并查集)
		
题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...
 - 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)
		
题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和. 判断账本真假是通过之前可算到的答案与当前读入的值是否 ...
 - 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)
		
题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...
 - 【poj 1182】食物链(图论--带权并查集)
		
题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...
 - POJ 1988 Cube Stacking( 带权并查集 )*
		
POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...
 - poj 1733 Parity game(带权并查集+离散化)
		
题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...
 - POJ 1733 Parity game(离散化+带权并查集)
		
离散化+带权并查集 题意:长度为n的0和1组成的字符串,然后问第L和R位置之间有奇数个1还是偶数个1. 根据这些回答, 判断第几个是错误(和之前有矛盾)的. 思路:此题同HDU 3038 差不多,询问 ...
 
随机推荐
- 搭建docker环境,安装常用应用(单机)
			
## 安装docker ```bash1.卸载系统之前dockersudo yum remove docker \ docker-client \ docker-client-latest \ doc ...
 - FlatBuffers使用小结
			
最近做一个Android APP,由于离线业务需求,需要在启动APP时候同步大量数据到APP上,遇到了JSON性能瓶颈.从下方的图片中可以看出,当使用 json 传输数据,在解析json的时候会产生大 ...
 - 2.4V升5V芯片,8uA功耗,低功耗升压电路图
			
2.4V升5V,可用于USB拔插充电,也可以用于把两节镍氢电池2.4V升压到5V,的固定输出稳压电压值,同时输出电流可达1A,0.5A等 首先是先说下0.5A的这款的话,是比较低功耗的,8uA左右的输 ...
 - pytest学习笔记(pytest框架结构)
			
一.pytest框架中使用setup.teardown.更灵活按照用例级别可以分为以下几类: 1.模块级:(setup_module.teardown_module)在模块始末调用 2.函数级:(se ...
 - 解决windows与虚拟机ubuntu互相ping不通的问题
			
工作中经常用Ubuntu开发,而Ubuntu是安装在虚拟机中的,在弄网络开发的时候经常会用windows下的网络调试工具与Ubuntu中写好的网络程序进行通信,首先要保证windows与Ubuntu能 ...
 - Failed to start LSB: starts php-fpm
			
跟nginx一样都是进程占用,记录下 [root@localhost pazzn]# systemctl status php-fpm.service ● php-fpm-72.service - L ...
 - VMware虚拟机提示“以独占方式锁定此配置文件失败”!!!
			
VMware异常关闭后再次启动提示"以独占方式锁定此配置文件失败"!!! 前几日在使用VMware虚拟机的时候,虚拟机突然出现了卡顿,然后就把电脑关机了重启,结果再次打开虚拟机的时 ...
 - C#高级编程第11版 - 第七章 索引
			
[1]7.1 相同类型的多个对象 1.假如你需要处理同一类型的多个对象,你可以使用集合或者数组. 2.如果你想使用不同类型的不同对象,你最好将它们组合成class.struct或者元组. [2]7.2 ...
 - 腾讯libco协程原理
			
https://blog.csdn.net/GreyBtfly/article/details/83688420 堆栈 https://blog.csdn.net/lqt641/article/det ...
 - 初始TypeScript
			
什么是TypeScript? TypeScript是拥有类型系统的JavaScript的超集,可以编译成纯JavaScript: 1.类型检查:TS会在编译代码时进行严格的静态类型检查,这意味着可以在 ...