离线处理,并查集,拆网

Contest (nefu.edu.cn)
Problem:B
Time Limit:1000ms
Memory Limit:65535K

Description

敌人的通讯网持续遭我袭击,请根据已经被切断的边来判断敌人的两个节点是否连通。

给定一个无向图,保证图中无重边自环,不保证图初始联通。
接下来q行,每行一个操作:
1 a b:查询a b结点是否联通,若是请输出yes,否则输出no
0 a:代表下表为a的边已经被摧毁

请注意:点的编号为[1,n],边的编号为[0,m)

Input

第一行三个整数n,m,q(1<n<=1e5,1<m,q<=1e6)
接下来m行,每行两个整数代表该边所连接的点编号,边的编号按输入顺序从0递增;
接下来q行,每行一个操作,格式如上所述。

Output

对于每一个操作1,输出一行yes或no

Sample Input

5 7 8
1 4
1 2
1 5
2 5
2 4
3 4
4 5
0 5
0 0
0 4
1 4 3
1 3 1
0 1
1 2 5
1 1 3

Sample Output

no
no
yes
no

Hint

 

Source

Kisaragi & _Yu

解析:离线处理,并查集

这道题让我们判断两点之间是否联通,我们可以想到用并查集来判断;

但由于并查集擅长的是建边,而不是题目所讲的拆边,所一这道题并不能直接使用并查集;

这里我们采用离线处理的方法:

将所有的数据先读入并存储起来,并且处理成最后的状态,我们从最后的状态往回处理,即先将边拆掉,再将边一条一条建回去,这样就将题目转换成了并查集擅长的形式

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>

using namespace std;
typedef long long LL;
const int M = 1e6 + 5, N = 1e5 + 5;
int n, m, q;
typedef struct st {
	int v, u,f;
}st;
st arr[M];
struct str {
	int op, a, b;
}str[M];

int fa[N];

int find(int a) {
	if (fa[a] == a) {
		return a;
	}
	return fa[a] = find(fa[a]);
}

void merge(int a, int b) {
	int x = find(fa[a]);
	int y = find(fa[b]);
	fa[x] = y;
}

int main() {
	cin >> n >> m >> q;
	for (int i = 0; i < m; i++) {
		scanf("%d%d", &arr[i].u, &arr[i].v);
	}
	for (int i = 0; i < q; i++) {
		scanf("%d", &str[i].op);
		if (str[i].op) {
			scanf("%d%d", &str[i].a, &str[i].b);
		}
		else {
			scanf("%d", &str[i].a);
			arr[str[i].a].f = 1;
		}
	}
	for (int i = 1; i <= n; i++) {
		fa[i] = i;
	}
	for (int i = 0; i < m; i++) {
		if (arr[i].f!=1) {
			merge(arr[i].u, arr[i].v);
			
		}
	}
	stack<string>s;
	for (int j = q - 1; j >= 0; j--) {
		if (str[j].op) {
			if (find(fa[str[j].a]) == find(fa[str[j].b])) {
				s.push("yes");
			}
			else {
				s.push("no");
			}
		}
		else {
			int t = str[j].a;
			merge(arr[t].u, arr[t].v);
		}
	}
	while (!s.empty()) {
		printf("%s\n", s.top().c_str());
		s.pop();
	}
	return 0;
}

### 回答1: 大数据离线数据抽取的步骤一般包括以下几个阶段: 1. 数据采集:采集需要处理的数据,包括结构化数据和非结构化数据。 2. 数据清洗:清洗采集到的数据,去除重复数据、无效数据和错误数据。 3. 数据预处理:对清洗后的数据进行处理,包括数据去噪、数据过滤、数据转换等,以便后续的分析和挖掘。 4. 数据集成:将不同来源的数据进行集成,生成一个完整的数据集。 5. 数据转换:将数据转换为目标系统可识别的格式,如将非结构化数据转换为结构化数据。 6. 数据归约:对数据进行归约操作,包括聚合、抽样等,以减小数据规模。 7. 数据存储:将处理后的数据存储到相应的数据仓库中,以便后续的分析和挖掘。 以上就是大数据离线数据抽取的基本步骤。 ### 回答2: 大数据离线数据抽取是指从大规模数据中提取有价值的数据并进行处理分析的过程。以下是大数据离线数据抽取的详细步骤: 1. 数据源选择:确定抽取数据的来源,可以是各种数据库、文件或日志等。 2. 数据预处理:对原始数据进行数据清洗和预处理,包括去除重复值、处理缺失值、格式转换等,以保证数据的质量和一致性。 3. 数据抽取:通过数据抽取工具或技术,将预处理后的数据从数据源中提取出来,常用的抽取方式有全量抽取和增量抽取。 4. 数据转换:将抽取出的数据进行转换、整合和归并,使其符合目标数据模型和格式要求,常用的技术有ETL(Extract-Transform-Load)工具和技术。 5. 数据加载:将转换后的数据加载到目标数据库或目标存储系统中,以便进行后续的数据分析和应用。 6. 数据分析:对加载后的数据进行分析和挖掘,可以使用各种数据分析和挖掘工具,如数据挖掘算法、统计分析等,以获取有价值的信息和洞察。 7. 数据可视化:将分析结果通过可视化工具展示出来,如图表、报表、仪表盘等,以便用户更直观地理解和利用数据。 8. 数据挖掘和建模:根据分析结果,进行数据挖掘和建模,以发现数据中的潜在模式、规律和关联,并构建相应的预测和决策模型。 9. 模型评估和优化:对建立的模型进行评估和优化,通过模型评估指标和反馈来不断优化模型的准确性和性能。 10. 应用和反馈:将分析结果和建立的模型应用到实际场景中,并根据实际应用情况进行反馈和调整,以持续提高数据分析的效果和价值。 以上是大数据离线数据抽取的主要步骤,每个步骤都非常重要,对于有效地利用大数据进行数据分析和挖掘具有关键作用。 ### 回答3: 大数据离线数据抽取是指从海量数据中提取所需数据的过程。以下是详细的步骤: 1. 数据源识别:首先确定需要抽取数据的源头,可以是关系数据库、文本文件、日志文件等各种数据源。 2. 数据源连接:与数据源建立连接,确保能够获取数据。连接方式可以是使用数据库连接工具、FTP、API等。 3. 数据提取规则设计:根据需求确定数据提取的规则,包括哪些表需要抽取、抽取的字段是什么等。这一步需要保证提取的数据能够满足后续使用的需求。 4. 数据抽取:根据提取规则,使用特定的工具或编写代码进行数据抽取操作。常用的工具包括Sqoop、Flume、Kettle等。 5. 数据转换:将抽取的原始数据转换成符合目标要求的格式。这一步可能包括数据清洗、格式转换、字段拆分合并等处理操作,以确保数据的准确性和一致性。 6. 数据加载:将转换后的数据加载至目标位置,可以是数据仓库、分析平台、报表工具等。加载方式可以是覆盖式更新或增量更新等。 7. 数据校验和验证:对加载后的数据进行校验和验证,确保数据的完整性和正确性。可以通过对比原始数据和转换后数据的差异、查询数据的准确性等方式进行验证。 8. 数据存储和备份:将已抽取的数据进行存储和备份,以便后续使用和恢复。可以选择合适的存储介质和备份策略。 9. 数据可视化和分析:将存储的数据通过数据可视化工具进行展示和分析,帮助用户理解和利用数据,从中发现潜在的业务价值。 10. 定期维护和优化:根据实际需求和数据变化情况,定期对数据抽取过程进行维护和优化,保证数据抽取的效率和准确性。 总之,大数据离线数据抽取的步骤包括数据源识别、数据源连接、数据提取规则设计、数据抽取、数据转换、数据加载、数据校验和验证、数据存储和备份、数据可视化和分析以及定期维护和优化。通过这些步骤,我们可以从海量数据中提取并利用有用的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值