HZNU-ACM寒假集训Day1小结 STL 并查集
常用STL
1.优先队列 priority_queue
内部是用堆(heap)实现的
priority_queue<int> pq; 默认为一个“越小的整数优先级越低的优先队列”
对于一些常见的优先队列,STL提供了更简单的定义方法 例如:“越小的整数优先级越大的优先队列”可以写成“priority_queue<int,vector<int>,greater<int> >pq"
自定义优先级
struct Node {
int x, y;
friend bool operator < (const Node& a, const Node& b) {
return a.x < b.x; //用小于号,表示小的先出列
}
};
priority_queue<Node> q;
2.map
内部是一颗红黑树
map的遍历
map<string, int> mp;
for (auto it = mp.begin(); it != mp.end(); it++) {
if (it->second > max) {
max = it->second; ss = it->first;
}
}
3.接口 erase() 和 count(),empty()要比count()快
4. 4.pair<>类型可以简化代码
二叉树的遍历
节点
struct treeNode {
string data; treeNode* left;
treeNode* right; treeNode() {
data = "";
left = NULL;
right = NULL;
}
};
1.先序遍历
void PreOrder(treeNode* node) {
if (node == NULL) return;
cout << node->data<<"->"; if (node->left != NULL) {
PreOrder(node->left);
}
if (node->right != NULL) {
PreOrder(node->right);
}
}
2.中序遍历
void InOrder(treeNode* node) {
if (node == NULL) return; if (node->left != NULL) {
InOrder(node->left);
} cout << node->data << "->"; if (node->right != NULL) {
InOrder(node->right);
}
}
3.后序遍历
void PosOrder(treeNode* node) {
if (node == NULL) return; if (node->left != NULL) {
PosOrder(node->left);
}
if (node->right != NULL) {
PosOrder(node->right);
}
cout << node->data << "->";
}
并查集
并查集用于集合联通和查询
两个核心函数 Union 和Find
int Find(int x) { //递归实现
return pre[x] != x ? pre[x] = Find(pre[x]) : x;
}
int Find() {
int p, tmp;
p = x;
while (x != pre[x]) x = pre[x];
while (p != x) { //路径压缩
tmp = pre[p]; //tmp暂存p的父节点
pre[p] = x; //pre[p]指向祖先节点
p = tmp;
}
return x;
}
void Union(int x, int y) {
int p = Find(x); int q = Find(y);
if (p != q) pre[q] = p;
}
畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1232
#include<iostream>
using namespace std;
int pre[];
int Find(int x) {
if (x == pre[x]) return x;
else {
pre[x] = Find(pre[x]);
return pre[x];
}
}
int Union(int x, int y) {
int p = Find(x);
int q = Find(y);
if (q != p) {
pre[q] = p; return ;
}
return ;
}
int main() {
std::ios::sync_with_stdio();
cin.tie();
int n, m;
int x, y;
while(scanf("%d",&n)!=EOF){
if (n == ) break;
scanf("%d", &m);
int ans = n - ;
for (int i = ; i <=n; i++) {
pre[i] = i;
}
for (int i = ; i < m; i++) {
scanf("%d%d", &x, &y);
ans-=Union(x, y);
}
if (ans >= ) printf("%d\n", ans);
else printf("0\n");
}
return ;
}
How Many Tables http://acm.hdu.edu.cn/showproblem.php?pid=1213
#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<queue>
#include<stack>
#include<sstream>
#pragma warning(disable:4996)
const int maxn = 1e6 + ;
const double PI = acos(-1.0);
typedef long long ll;
using namespace std;
int tot;
void read() {
char ch;
while ((ch = getchar()) != '\n');
} int pre[];
int Find(int x) {
if (x == pre[x]) return x;
else {
pre[x] = Find(pre[x]);
return pre[x];
}
}
void Union(int x,int y) {
int p = Find(x);
int q = Find(y);
if (q != p) {
pre[q] = p;
tot--;
}
}
int main() {
std::ios::sync_with_stdio();
cin.tie();
int n, m,k;
int t,x,y;
cin >> t;
while (t--) {
cin >> n >> m;
tot = n - ;
for (int i = ; i <= n; i++) pre[i] = i;
for (int i = ; i < m; i++) {
cin >> x >> y;
Union(x, y);
}
cout << tot+<< "\n";
}
return ;
}
HZNU-ACM寒假集训Day1小结 STL 并查集的更多相关文章
- 中南大学2019年ACM寒假集训前期训练题集(基础题)
先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...
- HZNU-ACM寒假集训Day8小结 最小生成树
最小生成树(无向图) Kruskal 给所有边按从小到大排序 形成环则不选择(利用并查集) P1546 最短网络 https://www.luogu.com.cn/problem/P1546 #i ...
- 中南大学2019年ACM寒假集训前期训练题集(入门题)
A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...
- HZNU-ACM寒假集训Day10小结 单调栈-单调队列
数据结构往往可以在不改变主算法的前提下题高运行效率,具体做法可能千差万别,但思路却是有规律可循 经典问题:滑动窗口 单调队列O(n) POJ 2823 我开始写的: TLE 说明STL的库还是有点慢 ...
- HZNU-ACM寒假集训Day3小结 搜索
简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...
- HZNU-ACM寒假集训Day2小结 二分答案
Day2 ---二分 这里直接给出模板 两种对应不同的情况 可以借助数轴理解 int bsearch_1(int l, int r) { while (l < r) { ; if (check( ...
- 清北学堂寒假集训DAY1
第一天,上午讲了些基本的技巧和简单算法,主要就是适应这里. 中午跑到食堂吃了顿“饭”(我并没有挖苦233333),然后回宿舍休息休息 因为 迎接我们的是模拟啊啊啊啊啊阿 下午题一发下来,并没有想象中的 ...
- 【2018寒假集训 Day1】【位运算】翻转游戏
翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...
- 【2018寒假集训 Day1】【位运算】桐桐的运输方案
桐桐的运输方案(transp) [问题描述] 桐桐有 N 件货物需要运送到目的地,它们的重量和价值分别记为: 重量:W1,W2,…,Wn: 价值:V1,V2,…,Vn: 已知某辆货车的最大载货量为 X ...
随机推荐
- centos 6.5安装NodeJS
centos 6.5安装NodeJS 下载 可以在本地下载node.js最新版,然后通过ftp工具上传到服务器,或者直接在服务器终端使用wget命令下载(我当时下载的是node-v7.5.0-linu ...
- 安卓10GB内存旗舰手机的普及,能成为拯救DRAM厂商的救命稻草吗?
你对2019年手机即将展现出的全新变化,有哪些期待?是全新的处理器.更名副其实的全面屏,还是愈发强大的拍照功能,抑或折叠屏幕?但不管你有怎样的期待,手机厂商似乎总是"不解风情".常 ...
- 5G大潮下卖点越来越少的苹果,会成为下一个诺基亚吗?
当下,5G显然成为手机厂商继全面屏.AI等之后,又一个重要的风口.为了赶上这个风口,很多厂商不惜寻找各种噱头去吸引大众的关注.比如小米在发布MIX 3之前疯狂造势称要发布5G版,但在10月25日的发布 ...
- element设置headers添加token
<template> <div> <el-upload action="http://localhost:3000/picture&qu ...
- 1、MYSQL 数据库的安装与配置
安装 1.打开官网https://www.mysql.com,选择社区版本 2.如图点击下在安装(本人在下载过程中亲身感觉下载时间非常漫长,需要等待,不知道为啥会有限速,可以参考网上教程用迅雷进行 ...
- Ceph 概念理解
简介 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储.块设备存储和文件系统服务. 在虚拟化领域里,比较常用到的是Ceph的块设备存储, ...
- CodeForces - 755B PolandBall and Game(博弈)
题意:A和B两人每人都熟悉一些单词.A先开始,每人说一个单词,单词不能与两人之前说过的所有单词重复,谁无话可说谁输.两人可能有共同会的单词. 分析:因为要让对方尽量无单词可说,所以每个人优先说的都是两 ...
- idea中使用maven运行wordcount代码
1.创建maven项目 pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- (转)zookeeper理解
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题 ...
- 四十九、在SAP中查看程序资源结构对象
一.在屏幕上点击这个品图标,相关说明如下图 二.使用这个程序资源结构对象可以很方便的定位