제출 #1103513

#제출 시각아이디문제언어결과실행 시간메모리
1103513secretwood01Bosses (BOI16_bosses)Java
0 / 100
56 ms14156 KiB
import java.util.*; import java.io.*; public class bosses { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw = new PrintWriter(System.out); int N = Integer.parseInt(br.readLine()); Node [] Nodes = new Node[N]; for (int i=0;i<N;i++) { Nodes[i] = new Node(i+1); } StringTokenizer st; for (int i=0;i<N;i++) { st = new StringTokenizer(br.readLine()); int num = Integer.parseInt(st.nextToken()); for (int j=0;j<num;j++) { int x = Integer.parseInt(st.nextToken()); Nodes[x-1].subemps.add(i+1); } } int [] Freq; int mintotSal = Integer.MAX_VALUE; for (int i=0;i<N;i++) { int ans = 0; Node root = Nodes[i]; int maxdist = 0; Freq = new int [N]; if (i!=0) reset(Nodes); Queue<Integer> q = new LinkedList<Integer>(); root.dist = 0; root.visited = true; q.add(i+1); while (q.size()>0) { Node curr = Nodes[q.poll()-1]; Freq[curr.dist]++; maxdist = Math.max(maxdist, curr.dist); for (int z : curr.subemps) { if (!Nodes[z-1].visited) { q.add(z); Nodes[z-1].visited = true; Nodes[z-1].dist = curr.dist+1; } } } for (int j=0;j<=maxdist;j++) { ans+=Freq[j]*(maxdist-j+1); } mintotSal = Math.min(mintotSal, ans); } pw.println(mintotSal); pw.close(); br.close(); } public static void reset(Node [] N) { for (Node x : N) {x.visited = false;x.dist = 0;} } } class Node { int num; int dist; ArrayList<Integer> subemps; boolean visited; public Node(int x) { this.num = x; this.subemps = new ArrayList<Integer>(); this.visited = false; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...