문제 링크
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;
}
