https://www.acmicpc.net/problem/17616
17616번: 등수 찾기
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에 세 정수 N, M, X가 공백을 사이에 두고 주어진다. (2 ≤ N ≤ 105, 1 ≤ M ≤ min(N(N-1)/2, 5×105), 1 ≤ X ≤ N) . 다음 M 줄에는 각각 두 정수 A, B가 주어
www.acmicpc.net
[난이도] Gold3
[유형] DFS
[풀이]
정방향,반대방향 인접 리스트를 이용해서 dfs를 두번하면 최대,최저 등수를 구할 수 있다.
#include <cstdio> #include <vector> #include <cstring> using namespace std; vector<int> adj[2][100001]; bool visit[100001]; int N,M,X,k; int dfs(int n){ visit[n]=1; int ret=1; for(auto v : adj[k][n]){ if(!visit[v]) ret+=dfs(v); } return ret; } int main(){ scanf("%d%d%d",&N,&M,&X); for(int i=0;i<M;i++){ int u,v; scanf("%d%d",&u,&v); adj[0][u].push_back(v); adj[1][v].push_back(u); } int U,V; U=N-dfs(X)+1; k=1; V=dfs(X); printf("%d %d",V,U); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold3/17616.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold3] 12785 : 토쟁이의 등굣길 (C++) (0) | 2021.03.01 |
---|---|
[BOJ/백준][Gold3] 1983 : 숫자 박스 (C++) (0) | 2021.03.01 |
[BOJ/백준][Gold3] 2836 : 수상 택시 (C++) (0) | 2021.03.01 |
[BOJ/백준][Gold5] 2170 : 선 긋기 (C++) (0) | 2021.03.01 |
[BOJ/백준][Gold3] 1132 : 합 (C++) (0) | 2021.03.01 |