본문 바로가기
Probelm Solving/Notes

그래프 (2) 문제들

by garrrruii 2021. 4. 26.

 

 

 

2593 Elevator    BFS DP

N층짜리 건물에서 주어진 수열의 층에서만 멈추는 엘레베이터가 M대 있을 때

A층에서 B층까지 가기 위해 최소한으로 갈아타는 엘레베이터의 수 & 내렸던 층을 구한다.

트래킹때문에 좀 복잡했던 문제같음..

더보기

 

현재 층 curf에서 탈 수 있는 엘레베이터 cure

cure에서 내릴 수 있는 다음 층 nxtf

nxtf가 B와 같다면 종료

다르다면 nxtf를 큐에 넣고 다음 엘레베이터 nxte로 갈아타며 dp를 업데이트

	// Initiate
	for (int e : f[A]) dp[A][e] = { 1,0 };
	Q.push(A);

	// BFS and Get Ans
	bool arrived_at_B = false;
	while (!Q.empty()) {
		arrived_at_B = false;

		int curf = Q.front(); Q.pop();
		for (int cure : f[curf]) {
			cnt = dp[curf][cure].first;

			//cure로 갈 수 있는 층 nxtf
			int k = E[cure].second;
			for (int nxtf = E[cure].first; nxtf <= N; nxtf += k) {
				if (nxtf == curf || dp[nxtf][cure].first) continue;

				dp[nxtf][cure] = { cnt,curf };
				if (nxtf == B) {
					S.push({ B,cure }); arrived_at_B = true; break;
				}
				Q.push(nxtf);

				//nxtf에서 갈아탄 nxte
				for (int nxte : f[nxtf]) {
					if (nxtf == curf || dp[nxtf][nxte].first) continue;

					dp[nxtf][nxte] = { cnt + 1, curf };
				}
			}
			if (arrived_at_B) break;
		}
		if (arrived_at_B) break;
	}

BFS에서 pair<int,int>를 썼었다가 int만 써도 해결할 수 있음을 알았다.

 

 

 

 

16946 벽 부수고 이동하기 4   BFS DFS Disjoint Set(?)

현재 위치의 상하좌우에 위치한 벽을 부쉈을 때 움직일 수 있는 칸의 수를 구하는 문제

BFS로 구간 구해서 동서남북 잘 더해주면 된다.

예전에 틀려서 방치해두다가 틀린 문제 고쳤다.

 

 

 

 

16724 피리부는 사나이   DFS Disjoint Set

움직임을 계속하다보면 도는 구간만 돌게 되는데 그 구간의 개수를 찾는 문제

 

 

 

 

1948 임계경로   위상정렬

시작점에서 도착점까지 모든 경로를 거쳐 가면서 가장 오래 걸리는 길을 찾는다.

초반에 다익스트라로 생각했다가 틀렸습니다 맞고 찾아보니 위상정렬,,,,

더보기

 

	Q.push(D);
	while (!Q.empty()) {
		int cur = Q.front(); Q.pop();

		for (edge e : E[cur]) {
			int cost = maxcost[cur] + e.c;
			if (cost > maxcost[e.v]) maxcost[e.v] = cost, from[e.v].clear();
			if (cost == maxcost[e.v]) from[e.v].push_back(cur);

			ind[e.v]--;
			if (!ind[e.v]) Q.push(e.v); //위상정렬
		}
	}

 

 

'Probelm Solving > Notes' 카테고리의 다른 글

그리디 (2)  (1) 2021.05.31
그리디 (1)  (0) 2021.05.03
KMP DP 트리 그래프 기하학 최근 푼 문제  (0) 2021.04.16
구현 (2) 지난 주 푼 문제  (0) 2021.04.05
그래프 (1) 최근 푼 문제  (0) 2021.03.15

댓글