# ã¯ã©ã¹ SCC (Strongly Connected Components: å¼·é£çµæååè§£) æåã°ã©ããå¼·é£çµæååè§£ãã¾ãã ## ã³ã³ã¹ãã©ã¯ã¿ ```java SCC(int n) ``` `n` é ç¹ `0` è¾ºã®æåã°ã©ããä½ãã è¨ç®é $O(n)$ ## ã¡ã½ãã ### addEdge ```java public void addEdge(int from, int to) ``` é ç¹ `from` ããé ç¹ `to` ã¸æå辺ãè¶³ãã å¶ç´ - `0 <= from < n` - `0 <= to < n` è¨ç®é amortized $O(1)$ ### build ```java public int[][] build() ``` 以ä¸ã®æ¡ä»¶ãæºãããããªããé ç¹ã®é åãã®é åãè¿ãã¾ãã - å ¨ã¦ã®é ç¹ãã¡ããã© 1 ã¤ãã¤ãã©ããã®ãªã¹ãã«å«ã¾ãã¾ãã - å å´ã®ãªã¹ãã¨å¼·é£çµæåãä¸å¯¾ä¸ã«å¯¾å¿ãã¾ãããªã¹ãå ã§ã®é ç¹ã®é åºã¯æªå®ç¾©ã§ãã - é åã¯ãããã¸ã«ã«ã½ã¼ãããã¦ãã¾ããç°ãªãå¼·é£çµæåã®é ç¹ `u`, `v` ã«ã¤ãã¦ã`u` ãã `v` ã«å°éã§ããæã`u` ã®å±ããé å㯠`v` ã®å±ããé åãããåã§ãã è¨ç®é 追å ããè¾ºã®æ¬æ°ã `m` ã¨ã㦠$O(n + m)$ ### id ```java public int id(int i) ``` é ç¹ `i` ã (ãããã¸ã«ã«é åºã«ããã¦) ä½çªç®ã®å¼·é£çµæåã«å±ãã¦ããããè¿ãã¾ããå³ã¡ï¼`build` ã§å¾ããããé ç¹ã®é åãã®é åã `g` ã¨ããã¨ã`g[id(i)][j] = i` ãªã `j` ãåå¨ãã¾ãã __ãã ãã`build` ãå¼ã¶åã«ãã®ã¡ã½ãããå¼ã°ããå ´åã¯ãå®è¡æä¾å¤ `UnsupportedOperationException` ãçºçãã¾ãã__ å¶ç´ - __`build` ã¡ã½ãããæ¢ã«å¼ãã§ãã__ - `0 <= i < n` è¨ç®é $O(1)$ ## 使ç¨ä¾ [AtCoder Library Practice Contest G - SCC](https://atcoder.jp/contests/practice2/submissions/16603978)