Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. public class MaxComponent
  5. {
  6.     private static int countVer;
  7.     private static int countEdge;
  8.  
  9.  
  10.     private static class Vertex {
  11.         ArrayList<Integer> edge = new ArrayList<>();
  12.         int visit;
  13.         int numComp;
  14.     }
  15.  
  16.     private static void visitVertex(Vertex[] nodes, Vertex v, int comp) {
  17.         v.visit = 1;
  18.         v.numComp = comp;
  19.         (countVer)++;
  20.         (countEdge) += v.edge.size();
  21.         for(Integer u : v.edge){
  22.             if(nodes[u].visit == 0)
  23.                 visitVertex(nodes, nodes[u], comp);
  24.         }
  25.     }
  26.  
  27.     private static void printVer(Vertex[] nodes, int maxComp, int n){
  28.         //nodes[i].visit = 1;
  29.         for(int i = 0; i < n; i++)
  30.             for(int j = 0; j <nodes[i].edge.size(); j++){
  31.                 int k = nodes[i].edge.get(j);
  32.                 if (i <= k){
  33.                     System.out.printf("%d -- %d ", i, k);
  34.                     if (nodes[i].numComp == maxComp)
  35.                         System.out.print("[color = red]");
  36.                     System.out.print("\n");
  37.                 }
  38.  
  39.             }
  40.     }
  41.  
  42.     public static void main(String[] args) {
  43.         long start = System.currentTimeMillis();
  44.         Scanner in = new Scanner(System.in);
  45.         int n = in.nextInt();
  46.         Vertex[] nodes = new Vertex[n];
  47.         int m = in.nextInt();
  48.  
  49.         for (int i = 0; i < n; i++) {
  50.             nodes[i] = new Vertex();
  51.             nodes[i].visit = 0;
  52.             nodes[i].numComp = -1;
  53.         }
  54.         for(int i = 0; i < m; i++){
  55.             int u, v;
  56.             u = in.nextInt();
  57.             v = in.nextInt();
  58.             nodes[u].edge.add(v);
  59.             if (u != v){
  60.                 nodes[v].edge.add(u);
  61.             }
  62.         }
  63.  
  64.  
  65.  
  66.         int maxNodes = -1, maxEdge = -1, comp = 0, maxComp = 0;
  67.  
  68.  
  69.         for(Vertex v : nodes){
  70.             if(v.visit == 0){
  71.  
  72.                 countEdge = 0;
  73.                 countVer = 0;
  74.                 visitVertex(nodes, v, comp);
  75.                 countEdge/=2;
  76.                 comp++;
  77.             }
  78.             if(countVer > maxNodes){
  79.                 maxNodes = countVer;
  80.                 maxEdge = countEdge;
  81.                 maxComp = comp - 1;
  82.             }
  83.             else
  84.             if(countVer == maxNodes && countEdge > maxEdge){
  85.                 maxEdge = countEdge;
  86.                 maxComp = comp - 1;
  87.             }
  88.         }
  89.  
  90.  
  91.         System.out.println("graph {");
  92.         for(int i = 0; i < n; i++){
  93.             System.out.printf("%d ", i);
  94.             if(nodes[i].numComp == maxComp)
  95.                 System.out.print("[color = red]");
  96.             System.out.print("\n");
  97.         }
  98.         //for(int i = 0; i < n; i++)
  99.         //  nodes[i].visit = 0;
  100.         //for(int i = 0; i < n; i++)
  101.         printVer(nodes, maxComp, n);
  102.         System.out.println("}");
  103.         System.out.println((double) (System.currentTimeMillis() - start));
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement