pat L2-010. 排座位 floyd 或 并查集

L2-010 排座位 (25分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系... 阅读详情

L2-010. 排座位

时间限制
150 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。

输入格式:

输入第一行给出3个正整数:N(<= 100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:“宾客1 宾客2 关系”,其中“关系”为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查询的宾客编号。

这里假设朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。

输出格式:

对每个查询输出一行结果:如果两位宾客之间是朋友,且没有敌对关系,则输出“No problem”;如果他们之间并不是朋友,但也不敌对,则输出“OK”;如果他们之间有敌对,然而也有共同的朋友,则输出“OK but...”;如果他们之间只有敌对关系,则输出“No way”。

输入样例:
7 8 4
5 6 1
2 7 -1
1 3 1
3 4 1
6 7 -1
1 2 1
1 4 1
2 3 -1
3 4
5 7
2 3
7 2
输出样例:
No problem
OK
OK but...
No way


表示为何我第一反应是用floyd……


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int N, M, K;
int u, v, w;
//c中,1表示直接朋友关系,0表示没有直接关系,6表示是敌人但是也有间接朋友关系
int c[105][105];

int main()
{
	memset(c, 0, sizeof(c));
	for (int i = 1; i <= N; i++) {
		c[i][i] = 1;
	}
	cin >> N >> M >> K;
	for (int i = 1; i <= M; i++) {
		scanf("%d%d%d", &u, &v, &w);
		c[u][v] = w;
		c[v][u] = w;
	}
	for (int k = 1; k <= N; k++) {
		for (int i = 1; i <= N; i++) {
			for (int j = 1; j <= N; j++) {
				if (i != j) {
					//朋友的朋友是朋友,朋友是递归定义
					if ((c[i][k] == 1 || c[i][k] == 6) && (c[k][j] == 1 || c[k][j] == 6)) {
						if (c[i][j] == -1) {
							c[i][j] = c[j][i] = 6;
						}
					}
				}
			}
		}
	}
	while (K--) {
		scanf("%d%d", &u, &v);
		if (c[u][v] == 0) {
			puts("OK");
		}
		else if (c[u][v] == 1) {
			puts("No problem");
		}
		else if (c[u][v] == -1) {
			puts("No way");
		}
		else if (c[u][v] == 6) {
			puts("OK but...");
		}
	}
	return 0;
}


并查集也行


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int N, M, K;
int u, v, w;
int c[105][105];
int f[105];

int getf(int x) {
	return f[x] == x ? x : f[x] = getf(f[x]);
}

void Merge(int x, int y) {
	int u = getf(x), v = getf(y);
	if (u != v) {
		if (u < v) {
			f[v] = u;
		}
		else {
			f[u] = v;
		}
	}
}

int main()
{
	memset(c, 0, sizeof(c));
	for (int i = 0; i <= 103; i++) {
		f[i] = i;
	}
	cin >> N >> M >> K;
	for (int i = 1; i <= M; i++) {
		scanf("%d%d%d", &u, &v, &w);
		c[u][v] = w;
		c[v][u] = w;
		if (c[u][v] == 1) {
			Merge(u, v);
		}
	}
	while (K--) {
		scanf("%d%d", &u, &v);
		if (c[u][v] == 1) {
			puts("No problem");
		}
		else if (c[u][v] == 0) {
			puts("OK");
		}
		else if (c[u][v] == -1) {
			if (getf(u) == getf(v)) {
				puts("OK but...");
			}
			else {
				puts("No way");
			}
		}
	}
	return 0;
}


C++ 排座椅 题目描述: 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。 同学们在教室中坐成了MM行NN列,坐在第i行第j列的同学的位置是(i,j)(i,j),为了方便同学们进出,在教室中设置了KK条横向的通道,LL条纵向的通道。 于是,聪明的小雪想到了一个办法,或许可以减... 阅读详情

相关推荐

排座椅 题解

题目描述: 样例输入: 4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4 样例输出: 2 2 4 数据范围: 2 <= N,M<= 1000 0<K<M 0<L<N D<=2000 提示: 上图中用符号*、※、+ 标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案 题解: 这题就是用贪心,主要思路如下: 1.输入x1、y1、x2、y2 ...

m0_60414779的博客 451

PAT - L2-010. 排座位(并查集)

L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务...

weixin_34015566的博客 866

L2-010 排座位(并查集)

题目链接:L2-010 排座位 考查知识:并查集 题意描述:给定n位宾客,m个关系,k条查询,要求判断两个顾客之间是死对头,朋友,死对头但有共同朋友,还是没有关系 思路简析:顾客之间是朋友的加入并查集,查询用find函数判断是否在一个集合内即可 具体代码#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e2+10; int fa[N]; int a[N][N];//a[i][j]:顾.

勿忘勿失的博客 313

L2-010 排座位(25分) c++代码

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。

REIDIO的博客 1034

Obsidian + AI 自动知识管理:手把手教程

装完后,在命令面板(Ctrl+P)搜 "Generate Summary",AI 会在当前笔记末尾追加一段摘要。你一个月前写的、现在想快速回顾的笔记长篇笔记(三千字以上)开会记录这类信息密集的内容过度自动化。有人装上插件后,所有笔记都让 AI 打标签、写摘要、找关联。最后笔记库看起来整整齐齐,但全都是 AI 的链接,你自己完全没参与。这样做的后果是什么?你写过的笔记跟你没有"真实连接"。你还是记不住。你还是不知道自己的知识库里有什么。AI 推荐,你决策。

weixin_43571227的博客 747

告别玄学调试:用STM32CubeMX和逻辑分析仪搞定DP83848的RMII与SMI接口

本文详细介绍了如何使用STM32CubeMX和逻辑分析仪调试DP83848的RMII与SMI接口,帮助开发者超越表象,直接观察底层通信波形。通过实战案例和高级调试技巧,解决常见问题如时钟偏移、信号完整性等,提升网络接口的稳定性和可靠性。

weixin_30752699的博客 297

排座椅(贪心+排序)

解题思路: 想让更少的人交头接耳,就必须保证一条过道可以尽可能多的分隔开两个说话的人,所以

m0_51769031的博客 1826

海康工业相机SDK+OpenCV实战:图像采集与Mat格式转换优化指南

本文深入探讨了如何高效利用海康工业相机SDK与OpenCV进行图像采集与处理。重点解析了从相机RawData到OpenCV Mat格式转换的核心优化技巧,包括像素格式匹配、内存零拷贝管理以及彩色图像BGR/RGB转换,旨在解决工业应用中常见的性能瓶颈与内存问题,构建稳定高效的图像处理流程。

weixin_29192211的博客 107

【C++题解】排座椅(seat)

列的前提下,使得交头接耳的学生对数最少。我们发现,输出的答案是严格从小到大的,则从。列会有多少同学交头接耳;从大到小排序,就可以找出前。列会有学生交头接耳,即让。行会有学生交头接耳,即让。行会有多少同学交头接耳。一道模拟+贪心的题。

JG_DF_的博客 1177

MTK_android11_WIFI(内网)和4G(外网)共存

MTK_android11_WIFI(内网)和4G(外网)共存

王涛的博客 2449

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

L2-010 排座位(C++, 分数 35)

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。

chq66666的博客 904

一个中科大差生的8年程序员工作总结

今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了,也有更多事情做错了,在这里记录一下,希望能够给后人一些帮助吧,也欢迎私信交流。文笔不好,见谅,有些细节记不清了,如果有出入,就当是我编的这个故事吧。 PS:有几个问题先在这里解释一下,评论就不一一回复了 1、关于差生,我本人在科大时确实成绩偏下,差生主要讲这一点,没其他意思。 2、因为买房是我人生中的大事,我认为需要记录和总结一下

陈小房的自我修炼 5万+

L2-010 排座位 (25 分) (并查集)

布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系...

Insistor 503

从零搭建:C#+YOLOv8质检系统(从相机选型到上位机部署,附完整开发流程与源码)

后来换成45°斜射的条形光源,光线从侧面打在引脚上,弯曲处会形成暗区,缺陷边缘立刻清晰——光源预算别省,我这套光源+支架才600块,比换相机划算多了。前阵子帮一家电子厂做连接器引脚缺陷检测,他们原来靠2个师傅用放大镜看,每天8小时最多检5000个,0.2mm的针脚弯曲还经常漏检,不良品流到客户那里,单月罚款就超5万。做质检第一步不是挑设备,是先明确“要检测多大的缺陷”——比如我要检的连接器引脚,直径0.5mm,允许的最大弯曲是0.2mm,这直接决定相机分辨率。,后面C#就用这个模型推理。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1267

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1212

L2-010 排座位 (25 分) c++ 并查集

分析 二维数组表示,会有测试点过不去 二维数组去表示他们的关系,在判断:x和y这两个人时,如果他们之间有敌对,然而也有共同的朋友,这个地方的时候,我们可以去找所有和x、y两个点有关系的人,通过一层循环,当某个人j同时满足和x存在盆友关系,满足条件; 第二个测试点过不去,因为会出现,朋友的朋友也是朋友,所以这样写有bug,所以可以考虑并查集; #include <bits/stdc++.h> using namespace std; int a[105][105]; int main(..

与其邻渊羡渔,不如退而结网 1121

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

L2-010 排座位 (25 分)(C语言)

题目 L2-010 排座位 (25 分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系,其中关系为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又

m0_61122217的博客 1809

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【PTA】【L2-010】排座位 (25 分)

注意理解题意:朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。 思路:使用并查集维护朋友关系,因为朋友关系是可以传递的。使用二维矩阵存储敌对关系,敌对关系是不传递的。按题目要求分类输出。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e2 + 5; int fa[N]; bool rela[N][N]; i.

智子的博客 656

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

L2-010 排座位

L2-010 排座位 (25分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的...

weixin_43310882 220

L2-010. 排座位 (图的DFS)

L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,

吴贝贝的博客 660

L2-010 排座位(C语言并查集)

题目 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系,其中关系为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查

qq_45880043的博客 1857

L2-010. 排座位

L2-010. 排座位布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(<= 100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:

Spencercjh 621

L2-010 排座位 (25 分)

#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 110; int p[N]; int g[N][N]; // 并查集 int find(int x) { if(p[x]!=x)p[x] = find(p[x...

遇见生活 190
上一篇: 蓝桥杯 历届试题 PREV-12 危险系数 并查集找割点 Java
下一篇: 团体程序设计天梯赛 L3-007. 天梯地图 Dijkstra
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值