02
12

 

https://www.acmicpc.net/problem/14267

 

14267๋ฒˆ: ํšŒ์‚ฌ ๋ฌธํ™” 1

์˜์„ ํšŒ์‚ฌ์—๋Š” ๋งค์šฐ ์ข‹์€ ๋ฌธํ™”๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ์ƒ์‚ฌ๊ฐ€ ์ง์† ๋ถ€ํ•˜๋ฅผ ์นญ์ฐฌํ•˜๋ฉด ๊ทธ ๋ถ€ํ•˜๊ฐ€ ๋ถ€ํ•˜์˜ ์ง์† ๋ถ€ํ•˜๋ฅผ ์—ฐ์‡„์ ์œผ๋กœ ์นญ์ฐฌํ•˜๋Š” ๋‚ด๋ฆฌ ์นญ์ฐฌ์ด ์žˆ๋‹ค. ์ฆ‰, ์ƒ์‚ฌ๊ฐ€ ํ•œ ์ง์† ๋ถ€ํ•˜๋ฅผ ์นญ์ฐฌํ•˜๋ฉด ๊ทธ ๋ถ€ํ•˜

www.acmicpc.net

 

import java.util.*;
import java.io.*;

public class Main {
	static List<Integer>[] t;
	static int[] p;
	static boolean[] v;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		t = new ArrayList[n + 1]; // idx=1์€ ์‚ฌ์žฅ์ด๋‹ˆ๊นŒ -1๋“ค์–ด๊ฐ.
		// -1 1 2 3 4
		// 1์€ ์‚ฌ์žฅ์ด๋‹ˆ ์ง์† ์ƒ์‚ฌ๊ฐ€ ์—†์œผ๋ฏ€๋กœ -1
		// 2๋Š” ์ง์›, ์‚ฌ์žฅ์ด ์ง์†์ƒ์‚ฌ.
		p = new int[n + 1];
		int sajang = sc.nextInt();
		for (int i = 1; i <= n; i++) {
			t[i] = new ArrayList<>();
		}
		for (int i = 2; i <= n; i++) {
			int sup = sc.nextInt(); // i๋ฒˆ ์ง์›์˜ ์ƒ์‚ฌ๊ฐ€ tmp๋‹ค.
			t[sup].add(i);
		}

		for (int i = 1; i <= m; i++) {
			int idx = sc.nextInt();
			int w = sc.nextInt();
			v = new boolean[n + 1];
			f(idx, w);
		}
		StringBuilder sb = new StringBuilder();
		for (int i = 1; i <= n; i++) {
			sb.append(p[i]).append(" ");
		}
		System.out.println(sb);
	}

	public static void f(int target, int appr) {
		v[target] = true; 
		if (p[target] == 0) {
			p[target] = appr;
		} else {
			p[target] += appr;
		}
		for (int i = 0; i < t[target].size(); i++) {
			int child = t[target].get(i);
			if(!v[child]) {
				f(child, appr);
			}
			 // ์ž์‹์„ ๊บผ๋‚ด์„œ, ๊ฑ”๋„ ๋„ฃ์–ด์คŒ.
//			p[target] += appr; <- ์ด ๋ฐฉ์‹์ด๋ฉด leaf ๋…ธ๋“œ๋Š” ์ž์‹์ด ์—†์–ด์„œ ๋”ํ•ด์งˆ ์ผ์ด ์—†๋‹ค..
		}
	}
}

 

 


์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ์ฝ”๋“œ๋‹ค. ์ž…๋ ฅ์ด 10๋งŒ์ธ๋ฐ for๋ฌธ์•ˆ์— for๋ฅผ ๋Œ๋ฆฌ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด๋ฒ„๋ ธ์œผ๋‹ˆ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค..

์นญ์ฐฌ์„ ๊ณ„์‚ฐํ•  ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋นผ์„œ ๊ด€๋ฆฌํ•ด์•ผ o(n)์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค...!

visited๋ฐฐ์—ด์ด ํ•„์š”๊ฐ€ ์—†์—ˆ๋˜ ๋ฌธ์ œ!

 


์ •๋‹ต์ฝ”๋“œ

public class Main {
	static List<Integer>[] t;
	static int[] p;
	static int[] like;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		t = new ArrayList[n + 1]; // idx=1์€ ์‚ฌ์žฅ์ด๋‹ˆ๊นŒ -1๋“ค์–ด๊ฐ.
		// -1 1 2 3 4
		// 1์€ ์‚ฌ์žฅ์ด๋‹ˆ ์ง์† ์ƒ์‚ฌ๊ฐ€ ์—†์œผ๋ฏ€๋กœ -1
		// 2๋Š” ์ง์›, ์‚ฌ์žฅ์ด ์ง์†์ƒ์‚ฌ.
		p = new int[n + 1];
		like = new int[n + 1];
		int sajang = sc.nextInt();
		for (int i = 1; i <= n; i++) {
			t[i] = new ArrayList<>();
		}
		for (int i = 2; i <= n; i++) {
			int sup = sc.nextInt(); // i๋ฒˆ ์ง์›์˜ ์ƒ์‚ฌ๊ฐ€ tmp๋‹ค.
			t[sup].add(i);
		}

		for (int i = 1; i <= m; i++) {
			int idx = sc.nextInt();
			int w = sc.nextInt();
			like[idx] += w;
		}

		f(1);

		StringBuilder sb = new StringBuilder();
		for (int i = 1; i <= n; i++) {
			sb.append(like[i]).append(" ");
		}
		System.out.println(sb);
	}

	public static void f(int target) {
		for (int i = 0; i < t[target].size(); i++) {
			int child = t[target].get(i);
			like[child] += like[target];
			f(child);
		}
	}
}

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT