USACO-Tea Time

该问题是一个图论问题,涉及奶牛之间的相互认识关系。给定奶牛的初始朋友关系,在经过一系列的‘喝茶时间’后,需要确定在所有新关系建立后,特定的奶牛对是否认识。程序通过构建邻接矩阵并迭代更新关系来解决这个问题。
摘要由CSDN通过智能技术生成

题目描述

N (1 <= N <= 1000) cows, conveniently numbered 1..N all attend a tea time every day. M (1 <= M <= 2,000) unique pairs of those cows have already met before the first tea time. Pair i of these cows who have met is specified by two differing integers A_i and B_i (1 <= A_i <= N; 1 <= B_i <= N). The input never indicates that cows have met each other more than once.

At tea time, any cow i and cow j who have met a mutual friend cow k will meet sometime during that tea time and thus expand their circle of known cows.

Determine whether Q (1 <= Q <= 100) pairs of cows have met after tea times are held for long enough that no new cow meetings are occurring. Query j consists of a pair of different cows X_j and Y_j (1 <= X_j <= N; 1 <= Y_j <= N).

For example, suppose that out of cows 1 through 5, we know that 2 has met 5, 2 has met 3, and 4 has met 5; see (a) below.

2---32---32---3
    \              |\  |            |\ /|
1    \     -->  1  | \ |    -->  1  | X |
      \            |  \|            |/ \|
   4---54---54---5
    (a)             (b)              (c)

In the first tea time, cow 2 meets cow 4, and cow 3 meets cow 5; see (b) above. In the second tea time, cow 3 meets cow 4; see (c) above.

N(1 <= N <= 1000)头奶牛,编号为1..N,在参加一个喝茶时间活动。在喝茶时间活动开始之前,已经有M(1 <= M <= 2,000)对奶牛彼此认识(是朋友)。第i对彼此认识的奶牛通过两个不相同的整数Ai和Bi给定(1<= Ai <= N; 1 <= Bi <= N)。输入数据保证一对奶牛不会出现多次。 在喝茶时间活动中,如果奶牛i和奶牛j有一个相同的朋友奶牛k,那么他们会在某次的喝茶活动中去认识对方(成为朋友),从而扩大他们的社交圈。 请判断,在喝茶活动举办很久以后(直到没有新的奶牛彼此认识),Q(1 <= Q <= 100)对奶牛是否已经彼此认识。询问j包含一对不同的奶牛编号Xj和Yj(1 <= Xj <= N; 1 <= Yj <= N)。 例如,假设共有1..5头奶牛,我们知道2号认识5号,2号认识3号,而且4号认识5号;如下图(a)。

2---32---32---3
    \              |\  |            |\ /|
1    \     -->  1  | \ |    -->  1  | X |
      \            |  \|            |/ \|
   4---54---54---5
    (a)             (b)              (c)

在某次的喝茶活动中,2号认识4号,3号认识5号;如上图(b)所示。接下来的喝茶活动中,3号认识4号,如上图(c)所示。

输入格式

* Line 1: Three space-separated integers: N, M, and Q

* Lines 2..M+1: Line i+1 contains two space-separated integers: A_i and B_i

* Lines M+2..M+Q+1: Line j+M+1 contains query j as two space-separated integers: X_j and Y_j

行1:三个空格隔开的整数:N,M,和Q

行2..M+1:第i+1行包含两个空格隔开的整数Ai和Bi

行M+2..M+Q+1:第j+M+1行包含两个空格隔开的整数Xj和Yj,表示询问j

输出格式

* Lines 1..Q: Line j should be 'Y' if the cows in the jth query have met and 'N' if they have not met.

行1..Q:如果第j个询问的两头奶牛认识, 第j行输出“Y”。如果不认识,第j行输出“N”

输入输出样例

输入 #1

5 3 3

2 5

2 3

4 5

2 3

3 5

1 5

输出 #1

Y

Y

N

代码如下:

#include<cstdio>
int a[2010]={},b[2001]={},zt[2010][2010]={};
int n,m,q;
int main(){
	int x,y;
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		zt[x][y]=1;
		zt[y][x]=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(zt[i][j]==1){
				for(int k=j+1;k<=n;k++){
					if(zt[i][k]==1){
						zt[j][k]=1;
						zt[k][j]=1;
					}
				}
			}
		}
	}
	for(int i=1;i<=q;i++){
		int xx,yy;
		scanf("%d%d",&xx,&yy);
		if(zt[xx][yy]==1) printf("Y\n");
		else printf("N\n");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值