백준 11562 백양로 브레이크

치즈·2023년 1월 26일

BOJ

목록 보기
34/45

문제 링크
11562 백양로 브레이크

#include <iostream>
#include <vector>
#define INF 987654321
using namespace std;
int N, M, K;

int road[251][251];

void init(){
  for(int i = 1; i <= N; i++){
    for(int j = 1; j <= N; j++){
      road[i][j] = INF; //초기화
    }
  }
}

void floyd(){
  for(int k = 1; k <= N; k++){
    for(int i = 1; i <= N; i++){
      for(int j = 1; j <= N; j++){
        // i->k, k->j로의 길이 있으면 i->j로의 길이 있음.
        if(i == j) road[i][j] = 0; //출발지 도착지가 같으면 필요한 길 개수 : 0
        road[i][j] = min(road[i][k] + road[k][j], road[i][j]);
      }
    }
  }
}

void solve(){
  cin >> N >> M;
  init();
  for(int i = 0; i < M; i++){
    int u, v, b;
    cin >> u >> v >> b;
    if(!b){
      //일방통행일 경우
      road[u][v] = 0;
      road[v][u] = 1;
      // u->v로만 길이 있는 상태
    } 
    else if(b == 1){
      //양방통행일 경우
      road[u][v] = 0;
      road[v][u] = 0;
      // u->v, v->u로의 길이 있는 상태
    }
  }
  floyd();
  cin >> K; //몇 명의 학생?
  for(int i = 0; i < K; i++){
    int s, e;
    cin >> s >> e; //start, end building
    cout << road[s][e] << "\n";
  }
  
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  solve();
  return 0;
}

profile
차근차근 배워나가요

0개의 댓글