제출 #255335

#제출 시각아이디문제언어결과실행 시간메모리
255335model_codeFirefighting (NOI20_firefighting)Java
100 / 100
2104 ms123500 KiB
import java.io.DataInputStream; import java.io.IOException; import java.util.*; import java.io.*; public class Firefighting { static class Reader { final private int BUFFER_SIZE = 1 << 16; private DataInputStream din; private byte[] buffer; private int bufferPointer, bytesRead; public Reader() { din = new DataInputStream(System.in); buffer = new byte[BUFFER_SIZE]; bufferPointer = bytesRead = 0; } public int nextInt() throws IOException { int ret = 0; byte c = read(); while (c <= ' ') { c = read(); } do { ret = ret * 10 + c - '0'; } while ((c = read()) >= '0' && c <= '9'); return ret; } public long nextLong() throws IOException { long ret = 0; byte c = read(); while (c <= ' ') { c = read(); } do { ret = ret * 10 + c - '0'; } while ((c = read()) >= '0' && c <= '9'); return ret; } private void fillBuffer() throws IOException { bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); if (bytesRead == -1) { buffer[0] = -1; } } private byte read() throws IOException { if (bufferPointer == bytesRead) { fillBuffer(); } return buffer[bufferPointer++]; } } public static class DirectedEdge{ int target; int len; public DirectedEdge(int target, int len){ this.target=target; this.len=len; } } public static class Result{ boolean type; long val; public Result(boolean type, long val){ this.type=type; this.val=val; } } public static ArrayList<DirectedEdge>[] adjlist; public static ArrayList<Integer> ans; public static long K; public static Result dfs(int index, int prev, long dist){ long max_overflow = Long.MIN_VALUE; long max_underflow = 0; for(DirectedEdge e : adjlist[index]){ if(e.target != prev){ Result res = dfs(e.target, index, e.len); if(res.type){ if(max_overflow < res.val) max_overflow = res.val; } else { if(max_underflow < res.val) max_underflow = res.val; } } } Result ret; if(max_overflow >= max_underflow) { ret = new Result(true, max_overflow-dist); } else { ret = new Result(false, max_underflow+dist); } if(!ret.type && ret.val > K){ ans.add(index); ret.type = true; ret.val = K-dist; } if(ret.type && ret.val < 0){ ret.type = false; ret.val = 0; } return ret; } public static void main(String[] args) throws IOException { Reader reader = new Reader(); PrintStream out = new PrintStream(new BufferedOutputStream(System.out)); int N = reader.nextInt(); K = reader.nextLong(); adjlist = (ArrayList<DirectedEdge>[]) new ArrayList[N]; ans = new ArrayList<Integer>(); for(int i=0;i<N;++i){ adjlist[i] = new ArrayList<DirectedEdge>(); } for(int i=1;i<N;++i){ int A = reader.nextInt(); int B = reader.nextInt(); int W = reader.nextInt(); --A;--B; adjlist[A].add(new DirectedEdge(B,W)); adjlist[B].add(new DirectedEdge(A,W)); } dfs(0, -1, Long.MAX_VALUE >> 2); out.println(ans.size()); for(int x : ans){ out.print(x+1); out.print(' '); } out.flush(); } }

컴파일 시 표준 에러 (stderr) 메시지

Note: Firefighting.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...