[Swust OJ 1091]--土豪我们做朋友吧(并查集,最值维护)
题目链接:http://acm.swust.edu.cn/problem/1091/
人都有缺钱的时候,缺钱的时候要是有个朋友肯帮助你,那将是一件非常幸福的事情。有N个人(编号为1到N),一开始他们互相都不认识,后来发生了M件事情,事情分为2个种类,1:A和B成为了朋友,并且A的所有朋友都成了B的朋友,B的所有朋友也都成了A的朋友。2:A缺钱了,请求帮助,他需要向他朋友中钱最多的请求帮助,若不止一位,选择编号最小的。
多组测试数据,每组第一行是整数N(2<=N<=100000),表示有N个人,第二行N个数据,依次表示每个人有多少钱,第三行是M(1<=M<=100000),表示发生了M个事件。接下来是M行,首先输入事件种类P(1或者2),然后是对应的两个或者一个整数A,B或者A。数据保证都在32位以内。
对于每一个事件2,输出A需要请求的人的编号,若没有人能够帮助他,输出"NO ONE CAN HELP!"。
|
1
2
3
4
5
6
7
|
3
1 2 3
3
2 1
1 1 3
2 1
|
|
1
2
3
|
NO ONE CAN HELP!
3
|
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int n, m, a, b, c, f[], val[];
struct tuhao{
int pos, money;
};
struct node{
tuhao max[];
}x[];
int cmp(const void *x, const void *y){
if ((*(tuhao *)x).money == (*(tuhao *)y).money)
return (*(tuhao *)x).pos - (*(tuhao *)y).pos;
return (*(tuhao *)y).money - (*(tuhao *)x).money;
}
void init(){
memset(x, , sizeof(x));
for (int i = ; i <= n; i++){
x[i].max[].money = val[i];
x[i].max[].pos = f[i] = i; }
}
int findset(int k){
int i = k, j = k, r;
while (i != f[i])
i = f[i];
while (j != i){
r = f[j];
f[j] = i;
j = r;
}
return i;
}
void mergy(int a, int b){
int tx = findset(a), ty = findset(b), i;
if (tx != ty){
f[ty] = tx;
for (i = ; i < ; i++){
x[tx].max[i].pos = x[ty].max[i - ].pos;
x[tx].max[i].money = x[ty].max[i - ].money;
}
qsort(x[tx].max, , sizeof(x[tx].max[]), cmp);
for (i = ; i < ; i++)
x[tx].max[i].pos = x[tx].max[i].money = ;
}
}
void Search(int k){
int v = findset(k);
if (!x[v].max[].pos)
cout << "NO ONE CAN HELP!\r\n";
else
cout << (x[v].max[].pos == k ? x[v].max[].pos : x[v].max[].pos) << "\r\n";
}
int main(){
while (cin >> n){
for (int i = ; i <= n; i++)
cin >> val[i];
init();
cin >> m;
for (int i = ; i < m; i++){
cin >> a;
switch (a){
case :cin >> b >> c; mergy(b, c); break;
default:cin >> b; Search(b); break;
}
}
}
return ;
}
[Swust OJ 1091]--土豪我们做朋友吧(并查集,最值维护)的更多相关文章
- [swustoj 1091] 土豪我们做朋友吧
土豪我们做朋友吧(1091) 问题描述: 人都有缺钱的时候,缺钱的时候要是有个朋友肯帮助你,那将是一件非常幸福的事情.有N个人(编号为1到N),一开始他们互相都不认识,后来发生了M件事情,事情分为2个 ...
- 九度OJ 朋友圈 -- 并查集
题目地址:http://ac.jobdu.com/problem.php?pid=1526 题目描述: 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友.. ...
- 九度OJ 1156:谁是你的潜在朋友 (并查集)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5802 解决:2593 题目描述: "臭味相投"--这是我们描述朋友时喜欢用的词汇.两个人是朋友通常意味着他们存在着许多 ...
- 值得一做》关于并查集的进化题目 BZOJ1015(BZOJ第一页计划)(normal-)
这道题和以前做过的一道经典的洪水冲桥问题很像,主要做法是逆向思维.(BZOJ第10道非SB题纪念) 先给出题目 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- 并查集练习(0743) SWUST OJ
#include<iostream> #include<cstring> using namespace std; ]; int n,m,l,ci,di; int root(i ...
- [Swust OJ 772]--Friend(并查集+map的运用)
题目链接:http://acm.swust.edu.cn/problem/772/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
随机推荐
- C#操作Office.word(一)
该文章主要是讲述如何使用VS2010创建word文档,因为在项目中我们可能需要点击一个按钮把数据库中的项目表单或图片显示到word文档中,因此该文章主要分析如何使用VS2010创建word文档并填写相 ...
- quartz 定时调度持久化数据库配置文件
1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址 https://github.com/quartz-scheduler/quar ...
- Tomcat 启动 Debug模式
如果debug启动遇到如下错误: ERROR: transport error 202: gethostbyname: unknown host ERROR: JDWP Transport dt_so ...
- C part 1 -- 指令篇
Windows系统的cmd(command命令行工具): Shutdown -s -t 600:表示600秒后自动关机 Shutdown -a :可取消定时关机 Shutdown -r -t 600: ...
- [LeetCode]题解(python):001-Two-Sum
题目来源: https://leetcode.com/problems/two-sum/ 题意分析: 这道题目是输入一个数组和target,要在一个数组中找到两个数字,其和为target,从小到大输出 ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- poj 1269 计算几何
/** 判断直线位置关系 **/ #include <iostream> #include <cmath> #include <cstdio> using name ...
- CentOS修改IP
编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 然后 service network restart DEVICE=eth0BOOTPROTO=noneNM_ ...
- web附件中文名
response.setHeader("Content-Disposition", "attachement;filename="+URLEncoder.enc ...
- jQuery File Upload 插件 php代码分析
jquery file upload php代码分析首先进入构造方法 __construct() 再进入 initialize()因为我是post方式传的数据 在进入initialize()中的po ...