7-10 排座位(并查集算法)
7-10 排座位(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
#include<bits/stdc++.h>
using namespace std;
int f[1000];
int fun(int a){if(f[a]==a){return f[a];}f[a]=fun(f[a]);return f[a];
}
void group(int x,int y){int tx=fun(x);int ty=fun(y);if(tx!=ty){f[tx]=ty;}return;
}
int main(){int a,m,n;int q,w,e,r,t;int arr[102][102];memset(arr,0,sizeof(arr));cin>>a>>m>>n;for(int i=1;i<=a;i++){f[i]=i;}for(int i=1;i<=m;i++){cin>>q>>w>>e;if(e==-1){arr[q][w]=arr[w][q]=-1;}else{group(q,w);}}for(int i=1;i<=n;i++){cin>>r>>t;if(fun(r)==fun(t) && arr[r][t]!=-1){printf("No problem\n");}if(fun(r)==fun(t) && arr[r][t]==-1){printf("OK but...\n");}if(fun(r)!=fun(t) && arr[r][t]!=-1){printf("OK\n");}if(fun(r)!=fun(t) && arr[r][t]==-1){printf("No way\n");}}return 0;
}
7-10 排座位(并查集算法)相关推荐
- 7-9 排座位 并查集
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...
- Union-Find 并查集算法详解
Union-Find 并查集算法详解 文章目录 Union-Find 并查集算法详解 一.问题介绍 二.基本思路 三.平衡性优化 四.路径压缩 五.总结 六.例题 一.问题介绍 简单说,动态连通性其实 ...
- C++并查集算法(详细)
C++并查集算法 什么是并查集? 并查集写法 详解 例题:洛谷 P3367.[模板]并查集 题意 代码 什么是并查集? 当我们在做图论题目的时候 经常会读到一些长这样的题目描述: -连接 a , b ...
- 并查集算法----犯罪团伙(黑科技)
一.题目描述 犯罪团伙(gang.cpp) 题目描述 警察抓到了n个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯 ...
- 并查集算法总结专题训练
并查集算法总结&专题训练 1.概述 2.模板 3.例题 1.入门题: 2.与别的算法结合: 3.考思维的题: 4.二维转一维: 5.扩展域并查集&边带权并查集: 4.总结 1.概述 并 ...
- 简单易懂的并查集算法以及并查集实战演练
文章目录 前言 一.引例 二.结合引例写出并查集 1. 并查集维护一个数组 2. 并查集的 并 操作 3. 并查集的 查 操作 4. 基本并查集模板代码实现--第一版(有错误后面分析) 4.1 Jav ...
- 并查集算法 | Union-Find Algorithm
Union-Find Algorithm即并查集算法,常用于解决 动态连通性,判断有向无圈图等问题. 根本上讲,Union-Find算法就和他的名字一样是一种对不相交集数据结构执行两个有用操作的算法, ...
- 给我三分钟,带你领略热血江湖中的并查集算法
你好,我是小黄,一名独角兽企业的Java开发工程师. 校招收获数十个offer,年薪均20W~40W. 感谢茫茫人海中我们能够相遇, 俗话说:当你的才华和能力,不足以支撑你的梦想的时候,请静下心来学习 ...
- 并查集算法c语言版,并查集及其C程序实现.doc
并查集及其C程序实现 等价关系与等价类 从数学上看,等价类是一个对象(或成员)的集合,在此集合中的所有对象应满足等价关系.若用符号"≡"表示集合上的等价关系,那么对于该集合中的任意 ...
最新文章
- 【JBOSS】User not found SA
- 判断人工智能是否可信的“四把尺子”
- linux系统中文件编程,Linux当中的文件系统
- FreeRtos 那点事
- mac osx linux,Linux 、Mac OSX 常见问题 及 笔记
- switch(封装)
- nuxt添加.html,Nuxt内导航栏的两种实现方式
- 案例分析|能源行业大数据案例分析
- html 表单在当前窗口打开,js使用post 方式打开新窗口
- 去水印小程序源码 独立版
- empty string mysql_Mysql中的null与empty string
- 网页通用的测试用例(出处:: 51Testing-- lxp1119216)
- PopupWindow 监听返回键
- Android智能硬件开发心得总结(二)
- 虚幻引擎(24)-2D动画序列
- gif图片体积过大怎么办?手把手教你快速压缩gif动图
- Linux 网络分析工具 fping命令解析
- 生信基础(三)——统计分析工具R语言
- ASP.NET防注入
- docker-comose搭建openldap
热门文章
- eCryptfs v0.1 Design Document
- freenom的域名如何添加Cloudflare 的Nameserver
- Springboot企业工资管理系统r9a51计算机毕业设计-课程设计-期末作业-毕设程序代做
- jmf android,XT800 ANDROID 2.1 升级教程(官方版) - XT800 论坛 ...
- 基于SSH的超市管理系统
- 【JAVA】-- 期末考试试题含答案(选择、判断、填空、简答)(一)
- asm(“nop“);的理解
- 20131129秒针系统算法面试
- 2. Sorting
- Ubuntu16.04安装UltraEdit报错问题