在經過大概20次WA終於過了!!
在寫這題時,要先dfs算scc,但是java在這麼大的遞迴深度會爛掉(C++我不知道,但我猜python也會),所以要這樣寫(以下假設檔名為zjg554):
import java.io.*;
import java.util.*;
public class zjg554 implements Runnable {
//全域變數放這
public static void main(String[] args) throws Exception {
new Thread(null, new zjg554(), "", 1<<26).start();//一個讓你容量變大的東西,在cf看到的
}
public void run(){
//你原本code的主函式
}
//其他函式如:public void dfs(int x)
...
}
再來程式的主要程式是先做scc,然後變成DAG之後記錄每個scc點的in-degree,檢查in-degree如果是0就把他移除、走訪他全部的父節點,並且將所有父節點-1後檢查,如此重複,如果有兩個以上in-degree都是0就是No,另外最後要檢查是不是所有點都走過了
如果不懂怎麼弄scc可以看這個:https://byvoid.com/zht/blog/scc-tarjan/
在經過大概20次WA終於過了!!
在寫這題時,要先dfs算scc,但是java在這麼大的遞迴深度會爛掉(C++我不知道,但我猜python也會),所以要這樣寫(以下假設檔名為zjg554):
import java.io.*;
import java.util.*;
public class zjg554 implements Runnable {
//全域變數放這
public static void main(String[] args) throws Exception {
new Thread(null, new zjg554(), "", 1<<26).start();//一個讓你容量變大的東西,在cf看到的
}
public void run(){
//你原本code的主函式
}
//其他函式如:public void dfs(int x)
...
}
再來程式的主要程式是先做scc,然後變成DAG之後記錄每個scc點的in-degree,檢查in-degree如果是0就把他移除、走訪他全部的父節點,並且將所有父節點-1後檢查,如此重複,如果有兩個以上in-degree都是0就是No,另外最後要檢查是不是所有點都走過了
如果不懂怎麼弄scc可以看這個:https://byvoid.com/zht/blog/scc-tarjan/
只能說Java真的比較辛苦,沒有python好用的函式多,效率又不如C++,記憶體又耗很多(我已經開到最大惹)
只能說Java真的比較辛苦,沒有python好用的函式多,效率又不如C++,記憶體又耗很多(我已經開到最大惹)
這似乎是zj預設拿來堆疊的記憶體設定問題,跟你512M的設定不太相關,對於每個語言系統應該都有一個預設極限,只是每個網站系統預設設定可能不太一樣(如果是自己的電腦可以透過另一個方式調整)