L2-010 排座位
时间限制
150 ms
内存限制
64 MB
题目描述:
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。
输入格式:
输入第一行给出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
给定m对人的关系
再给定k对人 求出这k对人之间的关系
emmmmmmm
并查集求两个人是否有共同好友
再来个二维数组去判断两个人是否有敌对关系
最后按照题意输出指定字符串即可
import java.io.*;
import java.math.*;
import java.util.*;public class Main
{static int N = (int) 1e2;static int fa[] = new int[N + 10];static int father(int x){if (fa[x] != x)fa[x] = father(fa[x]);return fa[x];}public static void main(String[] args) throws IOException{int n = ini(), m = ini(), k = ini();for (int i = 1; i <= n; i++)fa[i] = i;boolean di[][] = new boolean[N + 10][N + 10];while (m-- > 0){int a = ini(), b = ini(), op = ini();if (op == 1){int x = father(a), y = father(b);fa[x] = y;} elsedi[a][b] = di[b][a] = true;}while (k-- > 0){int a = ini();int b = ini();int x = father(a), y = father(b);if (x == y && !di[a][b])out.println("No problem");else if (x != y && !di[a][b])out.println("OK");else if (di[a][b] && x == y)out.println("");else if (di[a][b] && x != y)out.println("No way");}out.flush();out.close();}static StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));static PrintWriter out = new PrintWriter(System.out);static int ini() throws IOException{sc.nextToken();return (int) sc.nval;}
}
并查集
并查集
如果有说错的 或者 不懂的 尽管提 嘻嘻
一起进步!!!
闪现
本文发布于:2024-01-30 23:33:57,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662884023638.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |