04-树5. File Transfer (25)

04-树5. File Transfer (25)

时间限制

150 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

作者

CHEN, Yue

We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other?

Input Specification:

Each input file contains one test case. For each test case, the first line contains N (2<=N<=104), the total number of computers in a network. Each computer in the network is then represented by a positive integer between 1
and N. Then in the following lines, the input is given in the format:

I c1 c2

where I stands for inputting a connection between c1 and c2; or

C c1 c2

where C stands for checking if it is possible to transfer files between c1 and c2; or

S

where S stands for stopping this case.

Output Specification:

For each C case, print in one line the word "yes" or "no" if it is possible or impossible to transfer files between c1 and c2, respectively. At the end of each case, print in one line "The network is connected."
if there is a path between any pair of computers; or "There are k components." where k is the number of connected components in this network.

Sample Input 1:

5
C 3 2
I 3 2
C 1 5
I 4 5
I 2 4
C 3 5
S

Sample Output 1:

no
no
yes
There are 2 components.

Sample Input 2:

5
C 3 2
I 3 2
C 1 5
I 4 5
I 2 4
C 3 5
I 1 3
C 1 5
S

Sample Output 2:

no
no
yes
yes
The network is connected.
#include <stdio.h>
#include <stdlib.h>
int findSet(int *set, int val) {		//返回所在树的根节点
	while (set[val] >= 0) {
		val = set[val];
	}
	return val;
}
void unionSet(int *set, int c1, int c2) {	//按大小求并
	int root1 = findSet(set, c1);
	int root2 = findSet(set, c2);
	if (set[root1] < set[root2]) {	//树1更大,将树2连接到树1根节点
		set[root1] += set[root2];
		set[root2] = root1;
	}
	else {
		set[root2] += set[root1];
		set[root1] = root2;
	}
}
int main() {
//	freopen("test.txt", "r", stdin);
	int n;
	scanf("%d", &n);
	int *set = (int *)malloc(sizeof(int) * (n + 1));
	for (int i = 0; i <= n; ++i) {	//初始化树大小,根节点负值,其绝对值表示树大小
		set[i] = -1;
	}
	char ch;
	scanf("\n%c", &ch);
	while (ch != 'S') {
		int c1, c2;
		scanf("%d%d", &c1, &c2);
		if (ch == 'I') {
			unionSet(set, c1, c2);		//c1,c2所在集合求并
		}
		else if(ch == 'C') {
			if (findSet(set, c1) == findSet(set, c2)) {
				printf("yes\n");
			}
			else {
				printf("no\n");
			}
		}
		scanf("\n%c", &ch);
	}
	int cnt = 0;
	for (int i = 1; i <= n; ++i) {		//计算根节点个数
		if (set[i] < 0) {
			++cnt;
		}
	}
	if (cnt == 1) {
		printf("The network is connected.\n");
	}
	else {
		printf("There are %d components.\n", cnt);
	}
	free(set);

	return 0;
}

题目链接:http://www.patest.cn/contests/mooc-ds/04-%E6%A0%915

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 22:26:08

04-树5. File Transfer (25)的相关文章

04-2. File Transfer (25)并查集

04-2. File Transfer (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it

pat04-树5. File Transfer (25)

04-树5. File Transfer (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it

PAT 5-8 File Transfer (25分)

We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other? Input Specification:

PTA 5-8(English) File Transfer (25) - 并查集 - 数组实现

题目:http://pta.patest.cn/pta/test/16/exam/4/question/670 PTA - Data Structures and Algorithms (English) - 5-8 We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer t

05-树8 File Transfer (25分)

题目描述 We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other? Input Specificat

File Transfer (25)

这是一道考察“并查集”的题目 并查集只有并和查这两种操作 值得注意的是,因为查的操作是O(height)的,所以我们可以依靠一些小技巧降低树的高度,并且不增加时间复杂度 #include <iostream> using namespace std; bool check(int x, int y); void connect(int x, int y); int father(int x); int *a; int main() { int n; cin >> n; a = (i

05-树8 File Transfer (25 分)

05-树8 File Transfer (25 分) We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any o

PAT 05-树7 File Transfer

这次的题让我对选择不同数据结构所产生的结果惊呆了,一开始用的是结构来存储集合,课件上有现成的,而且我也是实在不太会,150ms的时间限制过不去,不得已,看到这题刚好可以用数组,结果7ms最多,有意思!什么是时间复杂度,终于有了一次感性的认识.这题还有个check的要求,我用了一个链表来存储,感觉挺麻烦的,不知是否有更好的方法,题设要求及代码实现如下 1 /* 2 Name: 3 Copyright: 4 Author: 5 Date: 06/04/15 09:46 6 Description:

PAT File Transfer

File Transfer We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other? Input S