L2-010 排座位 - java

题目解析

给定m对人的关系
再给定k对人 求出这k对人之间的关系

解题思路

并查集求两个人是否有共同好友
再来个二维数组去判断两个人是否有敌对关系

最后按照题意输出指定字符串即可

代码

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;
			} else
				di[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("OK but...");
			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;
	}
}

并查集
并查集


团体程序设计天梯赛-练习集-java

赞赏