BOJ 7577 - 탐사

dohoon·2021년 5월 30일
0

후... 넘 어려워서 나중에 다시 봐야할 듯.

boj.kr/7577

https://blog.naver.com/3587jjh/222030088627

https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/lecture-18-shortest-paths-ii-bellman-ford-linear-programming-difference-constraints/lec18.pdf

https://koosaga.com/72

https://medium.com/hackernoon/shortest-and-longest-path-algorithms-job-interview-cheatsheet-2adc8e18869

Bellman - Ford Algorithm

기능

음수 간선이 있는 그래프에서 O(VE)\mathcal O(|V||E|)에 SSSP를 구할 수 있다.

음수 사이클을 감지할 수도 있다. 참고로, 음수 사이클이 존재하는 그래프에서 최단경로는 -\infin가 되므로 일반적으로 정의하지 않는다.

코드

vector<tuple<int,int,int>> edge;
bool hasNegativeCycle;
void bellmanFord(int x) {
  dist[x] = 0;
  for (i = 1; i < n; ++i)
    for (auto [a,b,w] : edge)
      dist[b] = min(dist[b],dist[a]+w);
  for (auto [a,b,w] : edge)
    if (dist[b] < dist[a]+w)
      hasNegativeCycle = true;
}

pseudo code만큼 그 의미를 잘 살린 코드이므로 굳이 pseudo code를 작성하지는 않았다.

정당성

δ(s,v)\delta(s,v)ss에서 vv까지의 최단경로의 길이라고 정의하자. 이런 이유는 중간 프로세스에서 dist\text{dist}가 최단경로가 아닌 경우도 있기 때문이다.

Theorem. 음수 사이클이 없다면, dist[v]=δ(s,v)\mathrm{dist}[v]=\delta (s,v)가 된다.

Proof. 최단경로 pp를 생각하자. pp의 시작점부터 끝점까지 방문 순서에 따라 정점들에 순서를 매길 수 있다. pp위의 v1,v2,,vnv_1,v_2,\cdots ,v_n에 대해 δ(s,vi)=δ(s,vi1)+w(vi1,vi)\delta(s,v_i)=\delta(s,v_{i-1})+w(v_{i-1},v_i)가 만족한다. 물론 s=v0s=v_0, δ(s,v0)=0\delta(s,v_0)=0이다.

알고리즘을 적용하여 귀납적으로 증명하자.

a. dist[v0]=0\text{dist}[v_0]=0, dist[v0]=δ(s,v0)\text{dist}[v_0]=\delta(s,v_0)가 만족한다.

b. k=xk=x일 때, dist[vx]=δ(s,vx)\text{dist}[v_x] = \delta(s,v_x)이라 가정하자.

c. k=x+1k=x+1일 때, dist[vx+1]=dist[vx](=δ(s,vx))+w(vx,vx+1).\text{dist}[v_{x+1}]=\text{dist}[v_{x}](=\delta(s,v_x))+w(v_x,v_{x+1}).

dist[v]δ(s,v),\because \text{dist}[v]\ge \delta(s,v), 만약 dist[v]=δ(s,v)\text{dist}[v]=\delta(s,v)이면 갱신하지는 못해도 만족한다.

dist[vx+1]=δ(s,vx+1).\therefore \text{dist}[v_{x+1}]=\delta(s,v_{x+1}).

보충 설명 : pp 위에서 양의 사이클은 존재할 수 없다. δ(s,vi)=δ(s,vi1)+w(vi1,vi)<δ(s,vi1)+W.\because \delta(s,v_i)=\delta(s,v_{i-1})+w(v_{i-1},v_i)< \delta(s,v_{i-1})+W. 0의 사이클은 생략 가능하다. 0의 사이클만을 도려낸 경로도 최단경로이기 때문이다.

따라서 V1|V|-1번의 프로세스 후 vV,dist[v]=δ(s,v)\forall v\in V, \text{dist}[v]=\delta(s,v)가 만족한다.

시점 TT에 음수 사이클 위의 한 정점 v0v_0에 대해 dist[v0]\text{dist}[v_0]가 갱신되었다고 하자. 사이클 cc에 정점이 v0v1vn1v0v_0\to v_1\to\cdots\to v_{n-1}\to v_0를 이룬다고 하자.

시점 T+1T+1dist[v1]dist[v0]+w(v0,v1)\text{dist}[v_1]\le\text{dist}[v_0]+w(v_0,v_1), 만약 <<라면, 사이클 내부에서 갱신되고 있는 것이다.

시점 T+nT+ndist[v0]dist[vn1]+w(vn1,v0)\text{dist}[v_0]\le \text{dist}[v_{n-1}]+w(v_{n-1},v_0)로 갱신된다. 이 때도 <<라면 갱신되고 있는 것이다.

따라서 음수 사이클이 존재하면 쉬지않고 갱신이 이뤄진다.

Solving a system of difference constraints

xjxiwijx_j-x_i\le w_{ij}형태의 부등식들을 viwijvjv_i\overset{w_{ij}}\to v_j 형태의 그래프로 모델링 할 수 있다.

Theorem. 그래프가 음수 사이클을 지녔다면 system이 불능이다.

Proof. 음수 사이클을 지녔다고 가정하자. v1v2vkv1v_1\to v_2\to \cdots \to v_k\to v_1이라면

0wij<00\le \sum w_{ij}<0이므로 모순이다.

Theorem. 그래프에 음수 사이클이 없다면 system이 성립한다.

Proof. Claim. 최단경로가 존재한다면 system이 성립한다.

xi=δ(s,vi)x_i=\delta(s,v_i)라 하자. 삼각 부등식에 따라 δ(s,vj)δ(s,vi)+wij.\delta(s,v_j)\le \delta(s,v_i)+w_{ij}.

따라서 xjxiwijx_j-x_i\le w_{ij}를 잘 나타낸다.

profile
이 블로그 관리 안 한지 오래됨 / 백준 dohoon

0개의 댓글