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 |
Tags
- 삼성 SW 테스트
- dfs
- 후쿠오카
- 후쿠오카 여행경비
- 깊이 우선 탐색
- BOJ
- 삼성시험
- queue
- DP
- 플로이드 와샬
- IOS
- deque
- 삼성테스트
- 미로찾기
- 플로이드
- 다이나믹 프로그래밍
- 알고리즘
- 후쿠오카 캐널시티
- 큐
- 너비 우선 탐색
- 하카타역
- brute force
- 후쿠오카 요도바시 하카타
- 시뮬레이션
- 완전탐색
- BFS
- 후쿠오카 4박 5일
- 일본 여행
- 완전 탐색
- 백준
Archives
- Today
- Total
맛있는감귤
BOJ : 2458 키 순서 본문
문제 : https://www.acmicpc.net/problem/2458
github : https://github.com/JEONG-SEUNGWOOK/BOJ/blob/master/2458.cpp
출처
Olympiad > 한국정보올림피아드시․도지역본선 > 지역본선 2011 > 초등부 4번
갓초등부 문제치고는 쉬운 문제다.
플로이드 와샬 알고리즘을 이용해 각 노드의 연결 여부를 판단하고 자신의 키가 몇 번째 인지 아는 학생 (모든 연결고리를 가지고 있는 학생. 즉, 반복문을 돌린 배열에서 본인 노드가 N이라면 (N, Y)와 (X, N)이 모두 true인 노드)의 개수를 출력해주면 된다.
굳이 일일이 연결된 수를 계산안하고 bool 배열로 true 값만 찾아줘도 됩니다.
#include <stdio.h> #define INF 987654321 int N,M,ans=0; int arr[505][505]; int isConnected[505]={0,}; int main(){ scanf("%d%d",&N,&M); for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ arr[i][j] = INF; } } while(M--){ int a,b; scanf("%d%d",&a,&b); arr[a][b] = 1; } for(int k=1;k<=N;k++) for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) if(arr[i][j] > arr[i][k]+arr[k][j]) arr[i][j] = arr[i][k]+arr[k][j]; for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++){ if(arr[i][j]!=INF) { isConnected[i]++, isConnected[j]++; if(isConnected[i]==N-1) ans++; if(isConnected[j]==N-1) ans++; } } } printf("%d",ans); }
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
BOJ : 12790 Mini Fantasy War (0) | 2017.02.03 |
---|---|
BOJ : 2477 참외밭 (0) | 2017.01.19 |
BOJ : 2346 풍선 터뜨리기 (0) | 2017.01.19 |
BOJ : 2302 극장 좌석 (0) | 2017.01.19 |
BOJ : 2292 벌집 (0) | 2017.01.19 |