UVa 793 - Network Connections

本文介绍如何使用并查集算法解决网络中节点的连接状态查询问题,包括数据读入注意事项及实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:给出网络中的边,查询节点的连接状态。

分析:简单题、并查集。

注意:数据读入出错会RE。

#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <stdio.h>
#include <stack> 

using namespace std;

char E[ 3 ];

//union_set__begin
int  sets[ 10005 ];
int  rank[ 10005 ];
void union_set( int s, int t ) {
	for ( int i = s ; i <= t ; ++ i ) {
		sets[i] = i;
		rank[i] = 0;
	}
}
void Union( int a, int b ) {
	if ( rank[a] > rank[b] )
		sets[b] = a;
	else {
		sets[a] = b;
		if ( rank[a] == rank[b] )
			rank[b] ++;
	}
}
int Find( int a ) {
	if ( a != sets[a] )
		sets[a] = Find( sets[a] );
	return sets[a];
}
//union_set__end

int main()
{
	int n,m,a,b,A,B;
	while ( scanf("%d\n",&n) != EOF ) {
		while ( n -- ) {
			int v1 = 0,v2 = 0;
			scanf("%d\n",&m);
			union_set( 1, m );
			while ( E[0] = getchar() ) {
				if ( E[0] == '\n' || E[0] == EOF ) break;
				scanf("%d%d",&a,&b);
				getchar();
				A = Find(a);
				B = Find(b);
				if ( E[0] == 'c' ) {
					if ( A != B )
						Union( A, B );
				}else {
					if ( A != B ) ++ v2;
					else ++ v1;
				}
			}
			printf("%d,%d\n",v1,v2);
			if ( n ) printf("\n");
		}
	}
	return 0;
}


<think>我们正在处理用户的问题:用户引用了关于xhost命令的输出"non-network local connections being added to access control list",并询问其含义。 根据引用[1]和引用[3],这个输出是在执行`xhost local:oracle`命令后出现的,它表示允许本地非网络连接(即同一台机器上的不同用户)访问X服务器。 具体来说,`xhost`是一个用于控制X服务器访问权限的命令。当执行`xhost local:oracle`时,我们允许用户oracle从本地机器连接到X服务器(显示图形界面)。 用户的问题集中在输出信息中的“non-network local connections being added to access control list”是什么意思。 实际上,这条信息是xhost命令执行后的正常提示,并不是错误信息。它告诉我们:非网络的本地连接(即通过本地Unix域套接字)被添加到访问控制列表中,允许用户oracle访问当前的X服务器。 然而,引用[2]显示了一个错误场景:当错误地使用`xhost`命令(例如将整个字符串作为参数传递)时,会报错。但用户提供的引用[1]和[3]是正确用法。 因此,我们需要向用户解释: 1. 这个信息是正常提示,表示成功添加了本地用户oracle的访问权限。 2. 这个命令的作用是允许oracle用户(通常用于安装Oracle数据库)在同一个机器上访问当前用户的X服务器(显示图形界面)。 同时,我们可以进一步解释X服务器的访问控制机制: - 默认情况下,X服务器只允许启动它的用户访问(通常通过cookie机制,即`~/.Xauthority`文件)。 - 使用`xhost`命令可以添加其他用户或主机名的访问权限,但这种方法相对不安全(因为一旦允许某个主机,该主机上的所有用户都可以连接),所以通常建议使用更安全的xauth机制。 但是,在本地单用户机器上,为了安装Oracle等需要图形界面的程序,我们常常需要临时允许另一个用户(如oracle)访问当前用户的X服务器。这时使用`xhost local:oracle`是常见的做法。 另外,引用[3]中提到了一个错误:“Xlib: connection to ":0.0" refused by server”,这个错误通常是因为当前用户不允许其他用户访问X服务器,而执行`xhost local:oracle`就是为了解决这个问题。 因此,我们可以这样组织回答: 1. 解释该信息是正常提示,表示成功添加了本地用户oracle的访问权限。 2. 解释命令的作用和背景(为什么需要这个命令)。 3. 补充说明安全注意事项:在允许其他用户访问X服务器时,如果是在多用户系统或网络环境中,可能会带来安全风险,因此建议在完成安装后撤销该权限。 具体步骤: 步骤1:允许oracle用户访问 ``` xhost local:oracle ``` 输出:non-network local connections being added to access control list 步骤2:撤销权限(当不再需要时) ``` xhost -local:oracle ``` 注意:在某些系统中,也可以使用`xhost +local:`来允许所有本地用户访问,但这会允许所有本地用户连接,风险更大。 最后,根据用户的问题,我们还要生成相关问题。 参考引用[1]和[3],我们可以生成以下相关问题: 1. 如何解决X11连接被拒绝的错误? 2. 如何安全地配置X服务器的访问控制? 3. 安装Oracle数据库时遇到图形界面问题怎么办? 现在,我们按照要求用中文回答,并注意数学公式的格式(虽然这里可能没有数学公式,但如果有变量或表达式,会使用$...$)。</think>### 理解 "non-network local connections being added to access control list" 当您在 Linux 系统中执行 `xhost local:oracle` 命令时,出现的提示信息 `non-network local connections being added to access control list` 表示 X 服务器正在修改其访问控制规则。以下是详细解释: #### 1. **命令含义** ```bash xhost local:oracle ``` - `xhost`:X Window 系统的访问控制工具 - `local:oracle`:允许本地用户 "oracle" 访问当前 X 服务器 - **输出提示**:表示已将非网络本地连接(即同一台机器上的用户)添加到访问控制列表 #### 2. **技术背景 X 服务器默认只允许启动它的用户访问(如您的个人账户)。当您需要让其他**本地用户**(如 Oracle 数据库用户)访问图形界面时: 1. X 服务器使用 Unix domain sockets(非网络套接字)处理本地连接 2. `xhost local:username` 将这些本地连接加入白名单 3. 此时会显示提示信息:"non-network local connections being added..."[^1][^3] #### 3. **典型应用场景 - **安装 Oracle 数据库**:Oracle 安装程序需要 GUI 界面,但默认以 `oracle` 用户运行 - **解决方案**: ```bash # 在您的用户会话中执行: xhost local:oracle ``` - 允许 `oracle` 用户访问当前 X 服务器(`:0.0`) - 解决 `Error: Can't open display: :0.0` 错误[^3] #### 4. **安全说明 - ✅ **本地安全**:仅影响同一台机器的用户 - ⚠️ **风险提示**: ```bash xhost + # 危险!允许所有网络连接 ``` - 避免使用此命令,它会开放网络访问权限 - 推荐精确指定用户:`xhost local:username` #### 5. **操作验证 检查当前访问控制列表: ```bash xhost ``` 输出示例: ```text access control enabled, only authorized clients can connect LOCAL:oracle ``` 表示已成功添加 `oracle` 用户[^1] #### 6. **撤销权限 安装完成后建议撤销访问权限: ```bash xhost -local:oracle ``` > 提示信息是正常操作结果,并非错误。它确认 X 服务器已更新访问规则,允许指定用户通过**本地非网络连接**访问 GUI[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值