L2-025 分而治之 - java

题目解析

给定一个无向图,再给你k组进攻路线,判断这k组进攻路线是否可行

解题思路

暴力判断即可

首先如何判断当前城市是否孤立无援呢
也就是当前城市没被攻击,且相邻城市都被攻击了,这样子该城市就是孤立无援的城市

最后就是用无向图存储,for循环暴力去判断当前方案是否可行即可

代码

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	static int N = (int) 1e4;
	static ArrayList<Integer> map[] = new ArrayList[N + 10]; // 存储城市
	static boolean vis[] = new boolean[N + 10]; // 标记当前城市是否被攻击
	static int n, m;

	static boolean check()
	{
		for (int i = 1; i <= n; i++)
		{
			for (int j = 0; j < map[i].size(); j++)
			{
//				当前城市没有被攻击且相邻国家也没有被攻击
				if (!vis[i] && !vis[map[i].get(j)])
					return false;
			}
		}
		return true;
	}

	public static void main(String[] args) throws IOException
	{
		n = ini();
		m = ini();
		for (int i = 1; i <= n; i++)
			map[i] = new ArrayList<Integer>();

		while (m-- > 0)
		{
			int a = ini(), b = ini();
			map[a].add(b);
			map[b].add(a);
		}

		int k = ini();
		while (k-- > 0)
		{
			int np = ini();
			vis = new boolean[n + 10];
			while (np-- > 0)
			{
				int v = ini();
				vis[v] = true; // 当前城市被攻打了
			}
			out.println(check() ? "YES" : "NO");
		}

		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;
	}

}

ArrayList
ArrayList


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

赞赏