fork download
  1. import java.util.Scanner;
  2. import java.util.Queue;
  3. import java.util.LinkedList;
  4.  
  5. public class Main {
  6. public static void main(String[] args) {
  7. Scanner in = new Scanner(System.in);
  8. int T = in.nextInt();
  9. while (T-- > 0) {
  10. int n = in.nextInt();
  11. int m = in.nextInt();
  12. int[][] grid = new int[n][m];
  13. for (int i = 0; i < n; i++) {
  14. for (int j = 0; j < m; j++) {
  15. grid[i][j] = in.nextInt();
  16. }
  17. }
  18. boolean[][] visited = new boolean[n][m];
  19. int count = 0;
  20. int maxSum = 0;
  21. int[] dx = {-1, 1, 0, 0};
  22. int[] dy = {0, 0, -1, 1};
  23. for (int i = 0; i < n; i++) {
  24. for (int j = 0; j < m; j++) {
  25. if (grid[i][j] > 0 && !visited[i][j]) {
  26. Queue<int[]> queue = new LinkedList<>();
  27. queue.offer(new int[]{i, j});
  28. visited[i][j] = true;
  29. int sum = grid[i][j];
  30. while (!queue.isEmpty()) {
  31. int[] cell = queue.poll();
  32. for (int k = 0; k < 4; k++) {
  33. int x = cell[0] + dx[k];
  34. int y = cell[1] + dy[k];
  35. if (x >= 0 && x < n && y >= 0 && y < m && !visited[x][y] && grid[x][y] > 0) {
  36. visited[x][y] = true;
  37. sum += grid[x][y];
  38. queue.offer(new int[]{x, y});
  39. }
  40. }
  41. }
  42. count++;
  43. if (sum > maxSum) {
  44. maxSum = sum;
  45. }
  46. }
  47. }
  48. }
  49. System.out.println(count + " " + maxSum);
  50. }
  51. }
  52. }
Success #stdin #stdout 0.19s 58804KB
stdin
1
3 3
1 0 1
0 1 0
9 0 6
stdout
5 9