Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 슬랙봇
- 비즈니스적 관점에서 생각하는 개발자 #개발자 마인드
- django 슬랙봇
- 비즈니스
- 숲을 바라보는 개발자
- 알고리즘
- 개발자와 비즈니스
- AWS Aurora
- 비즈니스적 관점에서 생각하는 개발자
- ssl.key
- #백준 #드래곤커브 #알고리즘
- 웹소켓 api
- add colume
- public.pem
- django slack bot
- 개발자와 비즈니스 관계
- slack bot
- 데이터베이스 오류
- #알고리즘
- 정렬
- 개발자에세이
- django slack
- MySQL
- private.pem
- #데이터베이스 #트랜잭션 #ACID #격리수준
- 업비트 웹소켓
- 개발자의 마인드
- sed명령어
- django #django 5.0 #django 5.0 요약
- innodb_buffer_pool_size 오류
Archives
- Today
- Total
Info-Tech
파티 1238번 문제 본문
이 문제는 다익스트라 알고리즘이다.
우선 X의 집에서 왔다 갔다한 시간중에 제일 긴 사람을 찾는 문제이다.
즉, 1번부터 N번째까지 사람 중
distance(1,X) + distance(X,1) // 1번에서 X의 집에 갔다가 X의 집에서 다시 1번의 가는 방법이다.
문제에서 단방향으로 간다 했으니 이런식으로 최대값을 구해주어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import java.util.*; public class Main { static PriorityQueue<Node> queue; static ArrayList<Node>[] al; static int distance[]; static int n, m, x; static int Max = Integer.MIN_VALUE; static class Node implements Comparable<Node>{ int distance; int index; Node(int index, int distance){ this.index = index; this.distance = distance; } @Override public int compareTo(Node o) { // TODO Auto-generated method stub return this.distance <=o.distance ? -1 : 1; } } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); x = sc.nextInt(); distance = new int [n+1]; queue = new PriorityQueue<>(); al = new ArrayList[n+1]; for(int i=0; i<=n; i++) { distance[i] = Integer.MAX_VALUE; al[i] = new ArrayList<Node>(); } for(int i=0; i<m;i++) { al[sc.nextInt()].add(new Node(sc.nextInt(),sc.nextInt())); } int result[] = new int[n+1]; for(int i=1; i<=n; i++) { result[i] = dijkstra(i,x) + dijkstra(x,i); Max = Math.max(result[i], Max); } System.out.println(Max); } public static int dijkstra(int start, int end) { for(int k=0; k<=n; k++) { distance[k] = Integer.MAX_VALUE; } queue = new PriorityQueue<>(); distance[start] = 0; queue.add(new Node(start,0)); while(!queue.isEmpty()) { int current_index = queue.peek().index; int current_distance = queue.peek().distance; queue.remove(); for(Node node : al[current_index]) { int next_index = node.index; int next_distance = node.distance; if(distance[next_index] > current_distance + next_distance) { distance[next_index] = current_distance + next_distance; queue.add(new Node(next_index,distance[next_index])); } } } return distance[end]; } } | cs |
'백준문제풀이' 카테고리의 다른 글
스타트와 링크 14899번 문제 (0) | 2018.10.31 |
---|---|
집합의 표현 - 1717번 문제 (0) | 2018.10.24 |
드래곤 커브 (0) | 2018.10.23 |
Comments