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
- jdk
- 운영체제
- 바이트코드
- la-piscine
- 도커네트워크
- HeapArea
- LSP
- generics
- 42seoul
- 이노베이션아카데미
- JVM
- abstract
- StackArea
- 상속관계
- 제네릭스
- 포함관계
- 라피신
- SRP
- MethodArea
- 참조변수
- pg_hba.conf
- RDD
- Compiler
- JIT
- java
- classloader
- javac
- 자바컴파일러
- 42서울
- Operating System
Archives
- Today
- Total
while(1) 작심삼일();
[백준 1613번] 역사 본문
https://www.acmicpc.net/problem/1613
1613번: 역사
첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다.
www.acmicpc.net
풀이)
생긴건 위상정렬이지만, 앞 뒤 순서를 확인할 수 없기에 O(N^3)인 플로이드 와샬로 해결해야 한다. 예를 들어 순서가 1 > 3, 3 > 5라면 1 > 5처럼 전체를 다 돌면서 채워주면 된다.
#include <iostream>
using namespace std;
int n, m, s, a, b;
int accidents[401][401];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
while (m--)
{
cin >> a >> b;
accidents[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 (i == j || i == k || j == k)
continue;
if (accidents[i][k] && accidents[k][j])
accidents[i][j] = 1;
}
}
}
cin >> s;
while (s--)
{
cin >> a >> b;
if (accidents[a][b] == 1)
cout << "-1\n";
else if(accidents[a][b] == 0 && accidents[b][a] == 1)
cout << "1\n";
else if(accidents[a][b] == 0 && accidents[b][a] == 0)
cout << "0\n";
}
return (0);
}
제 코드는 절대 완벽하지 않습니다
더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!
'CS > baekjoon' 카테고리의 다른 글
[백준 2470번] 두 용액 (0) | 2021.04.19 |
---|---|
[백준 7569번] 토마토 (0) | 2021.04.17 |
[백준 1516번] 게임 개발 (0) | 2021.04.14 |
[백준 1300번] K번째 수 (0) | 2021.04.13 |
[백준 1238번] 파티 (0) | 2021.04.13 |
Comments