Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.42 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class MaxComponent{
  4.     public static void main(String[] args) {
  5.         Scanner in = new Scanner(System.in);
  6.         int n = in.nextInt(); // вершины
  7.         int m = in.nextInt(); // ребра
  8.         Graph g1 = new Graph(n);
  9.         for (int i = 0; i < m; i++) {
  10.             g1.addEdge(in.nextInt(), in.nextInt());
  11.         }
  12.         g1.findComps();
  13.         System.out.println(g1);
  14.     }
  15.  
  16.     private static class Graph{
  17.         private int V;
  18.         private Vector<Integer> adj[];
  19.         private boolean[] used;
  20.         private Vector<Integer> comp;
  21.         private Vector<Integer> maxComp;
  22.  
  23.         public Graph(int v){
  24.             V = v;
  25.             adj = new Vector[V];
  26.             used = new boolean[V];
  27.             comp = new Vector<>();
  28.             maxComp = new Vector<>();
  29.             for (int i = 0; i < v; i++) {
  30.                 adj[i] = new Vector<>();
  31.             }
  32.         }
  33.  
  34.         public void addEdge(int u, int v){
  35.             adj[u].add(v);
  36.             //adj[v].add(u);
  37.         }
  38.  
  39.         public void findComps(){
  40.             for (int i = 0; i < V; i++) {
  41.                 used[i] = false;
  42.             }
  43.             for (int i = 0; i < V; i++) {
  44.                 if (!used[i]){
  45.                     comp.removeAllElements();
  46.                     DFS(i);
  47.                     if (comp.size() > maxComp.size()) {
  48.                         maxComp.removeAllElements();
  49.                         maxComp.addAll(comp);
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.  
  55.         public void DFS(int v){
  56.             used[v] = true;
  57.             comp.add(v);
  58.             for (int i = 0; i < adj[v].size(); i++) {
  59.                 int to = adj[v].get(i);
  60.                 if (!used[to]) DFS(to);
  61.             }
  62.         }
  63.  
  64.         public String toString(){
  65.             StringBuilder res = new StringBuilder("graph {");
  66.             for (int i = 0; i < V; i++) {
  67.                 res.append("\n  ").append(i);
  68.                 if (maxComp.contains(i)) res.append(" [color = red]");
  69.             }
  70.             for (int i = 0; i < adj.length; i++) {
  71.                 if (!adj[i].isEmpty())
  72.                     for (int j = 0; j < adj[i].size(); j++) {
  73.                         res.append("\n  ").append(i).append(" -- ").append(adj[i].get(j));
  74.                         if (maxComp.contains(i)) res.append(" [color = red]");
  75.                     }
  76.             }
  77.             res.append("\n}");
  78.             return res.toString();
  79.         }
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement