7-2 排座位 (25 分)

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

输入格式:

输入第一行给出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

并查集介绍:

并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题;

常用操作有:

初始化
把每个点所在集合初始化为其自身。
通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。
查找
查找元素所在的集合,即根节点。
合并
将两个元素所在的集合合并为一个集合。
通常来说,合并之前,应先判断两个元素是否属于同一集合,这可用上面的“查找”操作实现。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int Rela[110][110];//关系
int Parent[110];//上一个节点,同一组的组长的上一节点号为自己的号
void Init_Parent_Rela(int N)
{for(int i=1; i<=N; i++){Parent[i] = i;//初始化根节点为自己 => 并查集的初始化for(int j=1; j<=N; j++){Rela[i][j] = 0;Rela[j][i] = 0;}}
}
int GetOriNode(int pos)//找根节点,根节点相同则在同一组中 => 并查集的查找
{if(Parent[pos] == pos)//如果上一节点号是自己则找到,返回return pos;else{//不是则递归int index = GetOriNode(Parent[pos]);return index;}
}
int Union(int m1, int m2)//=> 并查集的合并
{if(GetOriNode(m1) != GetOriNode(m2)){//根节点不一致int parent = GetOriNode(m1);//找到m1的根节点Parent[parent] = GetOriNode(m2);//将m1的根节点的号改成m2的根节点号,即将两者划到同一组}
}
int main()
{int N, M, K;scanf("%d %d %d", &N, &M, &K);Init_Parent_Rela(N);for(int i=0; i<M; i++){int m1, m2, rela;scanf("%d %d %d", &m1, &m2, &rela);Rela[m1][m2] = rela;Rela[m2][m1] = rela;if(rela == 1)Union(m1, m2);//是朋友就合并朋友圈}int m1, m2;for(int i=0; i<K; i++){scanf("%d %d", &m1, &m2);if(Rela[m1][m2] == 1)//直接朋友printf("No problem\n");else if(Rela[m1][m2] == -1){//存在敌对关系if(GetOriNode(m1) == GetOriNode(m2))//有共同朋友,在同一朋友圈中printf("OK but...\n");else//单纯的敌对关系printf("No way\n");}elseprintf("OK\n");//不是朋友,我感觉不是朋友在统一朋友圈也要输出"No proble",但是那样提交错误}
}

  

转载于:https://www.cnblogs.com/Jie-Fei/p/10161023.html

7-2 排座位 (25 分)相关推荐

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

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

  2. 7-14 排座位 (25 分)

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

  3. 【CCCC】L2-010 排座位 (25分),,并查集+二维矩阵判定关系

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

  4. 7-10 排座位 (25分)(并查集)

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

  5. 【Java】7-5 实验室使用排期 (25分)(List排序)

    7-5 实验室使用排期 (25分)(List排序) 受新冠疫情影响,当前大家的活动都必须注意保持充分的社交距离,国家实验室的使用也同样受到了严格的限制.假设规定任何一个时间点上,实验室内最多只能有 1 ...

  6. CCCC 天梯赛-5-10 排座位

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

  7. c语言寻找大富翁,PTA 7-38 寻找大富翁(25 分)解法(C/C++)暴力快排/精准堆排 解法...

    7-38 寻找大富翁 (25分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁. 输入格式: 输入首 ...

  8. 某大学图书馆,共有25排座位,每排10个,要求显示前n排的座位号

    题目描述 某大学图书馆,共有25排座位,每排10个,要求显示前n排的座位号 输入 输入n 输出 显示前n排座位号 样例输入 10 样例输出 01-01 01-02 01-03 01-04 01-05 ...

  9. 7-10 排座位(并查集算法)

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

最新文章

  1. 3559A sdk卡
  2. 成功解决h5py\_init_.py:26:FutureWarning: Conversion of the second argument of issubdtype from `float` to
  3. Ancient China Story of Shen-《Kung Fu Panda 2》
  4. django 1.8 官方文档翻译: 9-1-1 国际化和本地化
  5. 如何用计算机画磁滞回线,[画图的问题]怎么画类似于磁滞回线的图像?一个x值对应两个y值的...
  6. 如何利用 RPA 实现自动化获客?
  7. Inno Setup 6.0.0+ 繁体中文语言包
  8. 华为HCIE云计算之FC添加ipsan数据存储
  9. 所谓的1261考核法算不算是末尾淘汰?
  10. 混合溶剂中的高分子凝胶中的渗透压的一般计算
  11. Http头:only-if-cached
  12. 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
  13. Apache Griffin+Flink+Kafka实现流式数据质量监控实战
  14. android 调出键盘表情_Android 显示输入法中的emoji表情以及String字符
  15. android 手机中boot.img基址的计算方法(zz)
  16. 【JavaBeans中的属性!】
  17. Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER will not be exported
  18. SkeyeVSS智慧社区综合安防视频管理系统方案 助力小区安防建设智能化
  19. PHP2020语言排行榜,TIOBE公布了2020年12月编程语言排行榜
  20. 在Java中使用临时文件/文件夹

热门文章

  1. loj534. 「LibreOJ Round #6」花团
  2. 从TikTok功能优化,抓住直播带货机遇
  3. 使用HTML+CSS+JS 实现粒子动画
  4. css实现日出日落效果
  5. Python爬虫 - 抓取divnil动漫妹子图
  6. Datawhale组队学习——Pytorch进阶训练技巧
  7. Dubbo Wrapper
  8. 双鱼林 android 服务器,双鱼林安卓Android代码生成器下载_双鱼林安卓Android代码生成器官方下载-太平洋下载中心...
  9. IBM面试题:海盗分金算法及其思想
  10. JAVA菜鸟驿站快递分发系统计算机毕业设计Mybatis+系统+数据库+调试部署