2014新生暑假个人排位赛04 B. 田田的公司
来源:互联网 发布:彩虹秒赞 v7源码 编辑:程序博客网 时间:2024/05/01 06:05
B. 田田的公司
时间限制 3000 ms 内存限制 65536 KB
题目描述
田田家开了一家大公司,面对现在的形势,很多公司选择了联盟。联盟一旦成立就意味着联盟内的每个公司互相之间都认可结盟。所以当决定以一家公司为对手的时候就一定要计算出这家公司所在联盟的总实力值来决定有没有能力击败对手。
现在有n个公司,和m条信息。每条信息可能是某两个公司宣布联盟或者查询某个公司所在联盟的实力值
输入格式
多组数据
第一行为数据量T,每个case第一输入n,m ,之后一行输入n个数ai表示第i个公司的实力值,之后m行输入信息,有两种信息
第一种为两个公司联盟,该行为1 x y ,1表示联盟操作,即x,y两个公司联盟,
第二种为查询某个公司,该行为2 x,2表示查询操作,即查询x公司所在联盟的实力值;
T<=10
n,m<=10^5
ai<=10^6
输出格式
每个查询一行输出,输出那个公司联盟的实力值
输入样例
15 51 2 3 4 51 1 22 22 51 2 32 1
输出样例
356
并查集
#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>#include<cstring>#include<map>#include<cstdlib>using namespace std;#define N 100005int c[N],p[N];void init(){ int i; for(i=1;i<=100000;i++) { p[i] = i; c[i] = 0; }}int find(int x){ if(x!=p[x]) { int px=p[x]; p[x]=find(p[x]); c[x]=c[x]+c[px]; } return p[x];}int main(){ int T; scanf("%d",&T); while(T--) { long int n , m; scanf("%ld%ld",&n,&m); long long a[n]; init(); for(long int i = 1; i <= n; i++) { scanf("%lld",&a[i]); } init(); while(m--) { int m,x,y,q,px,py; scanf("%d",&m); if(m==1) { scanf("%d%d",&x,&y); px = find(x); py = find(y); if(px!=py) { p[py]=px; c[py]+=a[px]; a[px]+=a[py]; } } else if(m==2) { scanf("%d",&q); px=find(q); printf("%lld\n", a[px]); } } } return 0;}
0 0
- 2014新生暑假个人排位赛04 B. 田田的公司
- BUPT 2014新生暑假个人排位赛04
- 7.21-2014新生暑假个人排位赛04
- 2014新生暑假个人排位赛04
- 2014新生暑假个人排位赛01 B. 学姐去学车
- 2014新生暑假个人排位赛05 B. 立方体
- 2014新生暑假个人排位赛07 B.最长数链
- 2014新生暑假个人排位赛03 B. 学姐的旋转图像
- 2014新生暑假个人排位赛03 D. 田田的账号
- 2014新生暑假个人排位赛01 E. 数的关系
- 2014新生暑假个人排位赛05 A. 平方的平均值
- 2014新生暑假个人排位赛07 C.三角形的传说
- 2014新生暑假个人排位赛04 E. 焦级长搭积木
- BOJ 2014新生暑假个人排位赛04 整合
- BUPT 2014新生暑假个人排位赛01
- BUPT 2014新生暑假个人排位赛02
- 【总结】2014新生暑假个人排位赛03
- 【总结】2014新生暑假个人排位赛02
- 关于dll的一些事
- 铁三角M50的休闲听众或音乐专业
- Android报unable to instantiate application
- 安桌获取手机联系人的电话与email
- 拆箱和装箱
- 2014新生暑假个人排位赛04 B. 田田的公司
- 配音涡轮WAV音频文件与MP3的便携性
- 安卓Theme详解
- 欧美嘉分享旅行中不容错过的“怪异”水果
- (windows,linux)DES加密解密
- 爱狗的法师打发斯蒂芬
- [Python]collections模块中的Counter类
- poj 2524 Ubiquitous Religions
- 阿斯顿发送到发撒的发松岛枫