CCCC L2-010. 排座位【并查集/分类讨论】
L2-010. 排座位
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。
输入格式:
输入第一行给出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
【分析】:
分类讨论:
1.有共同朋友+非敌对——>输出:No problem
2.无共同朋友+非敌对——>输出:OK
3.有共同朋友+敌对——>输出:OK but...
4.无共同朋友+敌对——>输出:No way
【代码】:
#include <bits/stdc++.h>
using namespace std;
#define N 250
int a[N][N],fa[N], n; void init(int n)
{
for(int i=; i<=N; i++){
fa[i] = i;
}
} int Find(int x)
{
//fa[x] == x ? fa[x] : Find(fa[x]);
while( x!= fa[x]){
x = fa[x];
}
return x; } void join(int x, int y)
{
int fx = Find(fa[x]);
int fy = Find(fa[y]);
if( fx != fy){
fa[fx] = fy;
}
} int main()
{
int n, m, k, f, x, y;
cin >> n >> m >>k; init(n); for(int i=; i<=m; i++)
{
cin >> x >> y >> f;
if(f==) join(x,y);
if(f==-) a[x][y] = a[y][x] = ;
} for(int i=; i<=k; i++){
cin >> x >> y;
if(Find(x)==Find(y) && a[x][y] == ) cout<<"No problem"<<endl;
if(Find(x)!=Find(y) && a[x][y] == ) cout<<"OK"<<endl;
if(Find(x)==Find(y) && a[x][y] == ) cout<<"OK but..."<<endl;
if(Find(x)!=Find(y) && a[x][y] == ) cout<<"No way"<<endl;
}
}
并查集
CCCC L2-010. 排座位【并查集/分类讨论】的更多相关文章
- 【BZOJ-2503】相框 并查集 + 分类讨论
2503: 相框 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 71 Solved: 31[Submit][Status][Discuss] Desc ...
- hdu 并查集分类(待续)
hdu 1829 A Bug's Life 题目大意: 给你n个动物,输入m行a,b,表示a和b应该是异性的,要你判断是否有同性恋. 并查集中,1到n代表应性别,n+1到2n代表一个性别,合并一下,判 ...
- [学习笔记]kruskal重构树 && 并查集重构树
Kruskal 重构树 [您有新的未分配科技点][BZOJ3545&BZOJ3551]克鲁斯卡尔重构树 kruskal是一个性质优秀的算法 加入的边是越来越劣的 科学家们借这个特点尝试搞一点事 ...
- HDU1198水管并查集Farm Irrigation
Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot ...
- poj1417 true liars(并查集 + DP)详解
这个题做了两天了.首先用并查集分类是明白的, 不过判断是否情况唯一刚开始用的是搜索.总是超时. 后来看别人的结题报告, 才恍然大悟判断唯一得用DP. 题目大意: 一共有p1+p2个人,分成两组,一组p ...
- 天梯赛 L2-010 排座位 (并查集)
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...
- PAT l2-010 排座位 【并查集】
L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...
- L2-010. 排座位(并查集)*
L2-010. 排座位 参考博客 #include<iostream> #include<math.h> using namespace std; ]; ][]; int fi ...
- PAT 天梯赛 L2-010. 排座位 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-010 思路 因为 题意中 朋友的朋友 就是朋友 那么 朋友的关系 用 并查集 保存 但是 敌对关系 只有直接的 ...
随机推荐
- [Uva623]500!(高精)
Description 求N! \(N \leq 1000\) Sample Input 10 30 50 100 Sample Output 10! 3628800 30! 265252859812 ...
- 在VIM 里面编辑和保存
#查看a.sh 的内容 cat a.sh #编辑a.sh的内容 键入i,下面会出现 insert,输入内容之后按下esc会退出编辑模式(此时下面的insert没有了) 再输入:wq保存
- 常用的一些api
发送手机短信 // 发送短信给安全号码 SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phon ...
- Redis实现之RDB持久化(二)
RDB文件结构 在Redis实现之RDB持久化(一)这一章中,我们介绍了Redis服务器保存和载入RDB文件的方法,在这一节,我们将对RDB文件本身进行介绍,并详细说明文件各个部分的结构和意义.图1- ...
- Python虚拟机类机制之instance对象(六)
instance对象中的__dict__ 在Python虚拟机类机制之从class对象到instance对象(五)这一章中最后的属性访问算法中,我们看到“a.__dict__”这样的形式. # 首先寻 ...
- Careercup - Microsoft面试题 - 5917873302142976
2014-05-12 06:56 题目链接 原题: A link list contains following elements struct node{ int data; node* next; ...
- c4d 帮助 prime r16 usage
c4d 帮助 prime cinema 4d prime c4d 基础 前言 usage 开始 双击程序图标 双击一个场景文件 用开始菜单 windows 二选一 从 ...
- python 删除重复文件 附源代码
啥也不说了,直接上源码 #! /usr/bin/env python #coding=utf-8 import os import md5 import time def getmd5( filena ...
- 配置kubectl客户端通过token方式访问kube-apiserver
使用的变量 本文档用到的变量定义如下: $ export MASTER_IP=XX.XX.XX.XX # 替换为 kubernetes master VIP $ export KUBE_APISERV ...
- js后台提交成功后 关闭当前页 并刷新父窗体(转)
原文地址:http://www.cnblogs.com/chenghu/p/3696433.html 后台提交成功后 关闭当前页 并刷新父窗体 this.ClientScript.RegisterSt ...