题目描述

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

tip:

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

输出格式:

对每个查询输出一行结果:
如果两位宾客之间是朋友,且没有敌对关系,则输出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

初学并查集,可能代码并不是很优化。
我的思路是用用裸并查集存储朋友关系,建一个set集合数组去存每个人的直接敌对人的编号,然后判断时用set内已有的函数s.find()。
代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
//记录朋友关系
int f[105];
//存敌对关系
set<int> s[105];void init() {for (int i = 0; i < maxn; i++)f[i] = i;
}
int find(int x) {if (f[x] == x) {return x;} else {f[x] = find(f[x]);return f[x];}
}
void merge(int a, int b) {int t1 = find(a);int t2 = find(b);if (t1 != t2) {f[t2] = t1;}return;
}
void judge(int a, int b) {if (find(a) == find(b) && s[a].find(b) == s[a].end()) {printf("No problem\n");return; }if (find(a) != find(b) && s[a].find(b) == s[a].end()) {printf("OK\n");return;}if (s[a].find(b) != s[a].end() && find(a) == find(b)) {printf("OK but...\n");return; }if (s[a].find(b) != s[a].end() && find(a) != find(b)) {printf("No way\n");return;}
}
int main() {int n, m, k;init();scanf("%d%d%d", &n, &m, &k);//宾客关系int a, b, g; for (int i = 0; i < m; i++) {scanf("%d%d%d", &a, &b, &g);if (g == 1) {merge(a, b);} else {s[a].insert(b);s[b].insert(a);}}//查询 for (int i = 0; i < k; i++) {scanf("%d%d", &a, &b);judge(a, b);}
}

天梯赛L2-010 排座位(并查集和\set)相关推荐

  1. C++学习之路 | PTA(天梯赛)—— L2-010 排座位 (25分)(带注释)(并查集)(精简)

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

  2. 团体程序设计天梯赛-L2组

    团体程序设计天梯赛-L2组 -------------------------------------------------------------------------------- 题目传送门 ...

  3. 团体程序设计天梯赛 L2 题目合集

    前言 发现自己还能再参加一次天梯赛,在高兴之余,决定把在赛前将所有的天梯赛真题过一遍,希望自己可以取得理想的成绩.目前 L1 的题目已经刷完,打算在赛前刷完 L2 的题目. 本来想 L2 的题目都写个 ...

  4. 【L2-022 重排链表】天梯赛L2系列详细解答

    天梯赛L2-022 重排链表 题目详情: 输入样例: 00100 6 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 6823 ...

  5. 【天梯赛 - L2习题集】啃题(12 / 44)

    目录 !L2-001 城市间紧急救援 - Dijkstra运用 !L2-002 链表去重 - 链表模拟 !L2-003 月饼 - 结构体+重载运算符+排序 !L2-004 这是二叉搜索树吗?- 建二叉 ...

  6. PTA程序设计天梯赛 L2题解报告(40/40)

    目录 L2-001 紧急救援 (25 分) L2-002 链表去重 (25 分) L2-003 月饼 (25 分) L2-004 这是二叉搜索树吗? L2-005 集合相似度 (25 分) L2-00 ...

  7. 【L2-020 功夫传人】天梯赛L2系列详解

    天梯赛L2-020 功夫传人 题目详情: 思路: 这个题目的看着就感觉需要深搜一下,不妨将样例画出来,思路就突然涌来了.很明显的一道深搜的题目: 题目刚开始输入的一行信息整体的信息:宗门人数,祖师爷功 ...

  8. 【L2-024 部落】天梯赛L2系列详解

    天梯赛L2-024 部落 题目详情: 输入样例: 4 3 10 1 2 2 3 4 4 1 5 7 8 3 9 6 4 2 10 5 3 7 输出样例: 10 2 Y N 思路: 很明显的并查集的一道 ...

  9. 【L2-040 哲哲打游戏】天梯赛L2题集

    天梯赛L2-40 题目详情: 思路: 先来一张我自己的手写解析图: (字比较丑,不过呢没有对样例推到完整,这种东西最好自己推一遍哈) 我感觉想清楚这三个问题就很有思路啦: 1.开始地址是什么? 2.如 ...

  10. 【L2-019 悄悄关注 】天梯赛L2系列详解

    天梯赛L2-019 悄悄关注 题目详情: 输入样例1: 10 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao 8 Magi 50 Pota 30 L ...

最新文章

  1. 互联网项目管理要点(转)
  2. 折纸机器人的步骤图解_折纸图解老虎
  3. 成功解决sub_div.insert(points)cv2.error: OpenCV(3.4.1) C:\projects\opencv-python\opencv\modules\imgproc
  4. pycharm+python+bootstrap写一个登陆界面_Python--day56(前后台数据交互、bootstrap)
  5. VTK:可视化之Follower
  6. VTK:IO之DEMReader
  7. wamp2 php配置,Wamp2+SVN+Eclipse配置_PHP教程
  8. 自适应 幻灯片代码 app_字节跳动 To B 再添一员,将推出飞书文档独立App | 36氪独家...
  9. java第一季_Java入门第一季
  10. 群里又会python的吗_自从会了Python在群里斗图就没输过,Python批量下载表情包!...
  11. Python 数据结构与算法——选择排序(迭代版、递归版)
  12. 打印流-PrintStream和PrintWriter
  13. 数据结构笔记(二十九)--最小生成树(prim算法思想)
  14. 快速了解java语言
  15. 使用pyqt开发gui(pyqt集成到pycharm)
  16. Javascript 调用MSAgent(调用office助手显示动画)
  17. WAV音频文件的分析
  18. 将ppt里的图片高分辨率保存的方法
  19. Wowza服务器系列(3):试用wowza Stream Engine服务运行
  20. 伪C++开发小游戏---连连看

热门文章

  1. 【BZOJ】【1036】树的统计
  2. 网络游戏同步问题综述
  3. 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
  4. syslog-ng按源ip保存记录
  5. jQuery源码研究分析学习笔记-静态方法和属性(10)
  6. javascript表单处理相关的知识总结(一)
  7. 怎么查询AI论文的源代码?
  8. C++队列、堆栈、堆的区别
  9. Python中判断回文数
  10. oracle export命令使用浅解,Oracle Export命令使用浅解