백준 10159 저울

치즈·2023년 1월 25일

BOJ

목록 보기
33/45

플로이드-워셜로 풀면 쉽게 풀리는 문제.
i > k이고, k > j로 대소 관계가 정해지면 i > j의 대소관계가 정해지는 점을 이용해 주면 된다.

#include <iostream>
#include <vector>
#define INF 987654321
using namespace std;
int N, M;
int dp[101][101];

void init(){
  for(int i = 1; i <= N; i++){
    for(int j = 1; j <= N; j++){
      dp[i][j] = 0;
    }
  }
}

void input(){
  cin >> N;
  cin >> M;
  for(int i = 0; i < M; i++){
    int a, b;
    cin >> a >> b;
    dp[a][b] = 1;
  }
}

void floyd(){
  for(int k = 1; k <= N; k++){
    for(int i = 1; i <= N; i++){
      for(int j = 1; j <= N; j++){
        if(dp[i][k] == 1 && dp[k][j] == 1) dp[i][j] = 1;
      }
    }
  }

  for(int i = 1; i<= N; i++){
    int cnt = 0;
    for(int j = 1; j <= N; j++){
      if(i==j) continue;
      if(dp[i][j] == 0 && dp[j][i] == 0) cnt++;
    }
    cout << cnt <<"\n";
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  init();
  input();
  floyd();
  
  return 0;
}

profile
차근차근 배워나가요

0개의 댓글