티스토리 뷰

#include <stdio.h>
#define INF 100000000

int main(void)
{
	int n, m, r; //입력
	scanf("%d %d %d", &n, &m, &r);
	int d[n][n]; //최단 거리를 담는 배열
	int bag[n]; //각 구역에서 얻는 물건들 개수
	
	for(int i=0; i<n; i++) { //최단거리 배열 초기화
		for(int j=0; j<n; j++) d[i][j]=INF;
		d[i][i]=0; //자기 자신의 거리는 0
	}
	
	for(int i=0; i<n; i++) scanf("%d", &bag[i]); //각 구역에서 얻을 수 있는 물건의 개수 입력
	
	while(r--) { //간선 정보 입력 (양방향)
		int a, b, l;
		scanf("%d %d %d", &a, &b, &l); 
		d[b-1][a-1] = d[a-1][b-1] = l; //양방향
	}
	
	for(int k=0; k<n; k++) //Floyd Warshall
	for(int i=0; i<n; i++)
	for(int j=0; j<n; j++) {
		if(d[i][k] + d[k][j] < d[i][j]) 
		d[i][j] = d[i][k] + d[k][j];
	}
	
	int max = 0; //최댓값을 담는 변수
	for(int i=0; i<n; i++) { //최댓값 구하기
		int cnt = 0;
		for(int j=0; j<n; j++) {
			if(d[i][j] <= m) cnt += bag[j];
		} if(max < cnt) max = cnt;
	} printf("%d", max); //최댓값 출력
}

풀이 : Floyd Warshall

0. n, m , r 입력받음

1. 최단 거리 배열 초기화

2. 각 구역의 물건 개수를 입력받기

3. 간선의 정보 입력받기 (양방향!!!!)

4. Floyd Warshall

5. 최댓값 구하기

6. 최댓값 출력

 

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

 

14938번: 서강그라운드

예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함