코 도리 의 당직 구역 연속 구간
2408 단어 DFS
공간 제한: C / C + + 131072 K, 기타 언어 262144 K
64bit IO Format: %lld
제목 설명
코 돌 리 는 몇 개의 키 나무 가 그 내부 노드 번 호 를 만족 시 키 기 위해 당직 구역 에서 연속 되 는 지 알려 주 었 다.
일부 수 는 당직 구역 에서 연속 적 인 뜻 으로 당직 구역 에서 연속 적 인 구간 을 구성 한 다 는 것 이다.
입력 설명:
n, 。
n–1 , x,y, x y 。
。
출력 설명:
예시 1
입력
5
2 3
2 1
2 4
4 5
출력
5
설명 하 다.
1 1,
3 3,
5 5,
4 4,5,
2 1,2,3,4,5,
비고:
100% , n <=100000
:
dfs , stack queue, ,
k , dfs
:
#include #include #include #include #include using namespace std; const int inf = 1e5 + 10; struct node{ int Max; int Min; int num; bool fou = false; }th[inf]; vectors[inf]; int ans; void dfs(int st) { if(s[st].size() == 0){ th[st].Max = st; th[st].Min = st; th[st].num = 1; ans ++; //직접 return 은 중복 을 방지 하기 위해 서 입 니 다. return ; } for(int i = 0; i < s[st].size(); i ++){ dfs(s[st][i]); //최대 값 의 최소 값 을 구 한 노드 와 비교 하여 st 노드 의 최대 최소 값 과 num 을 업데이트 합 니 다. th[st].Max = max(th[s[st][i]].Max, th[st].Max); th[st].Min = min(th[s[st][i]].Min, th[st].Min); th[st].num += th[s[st][i]].num; } //루트 노드 의 노드 서비스 가 아 닌 것 을 위해 제목 요구 에 부합 되 는 지 판단 합 니 다. if(th[st].Max - th[st].Min + 1 == th[st].num){ ans ++; } } bool root[inf]; int main() { int n; scanf("%d", &n); int k; for(int i = 1; i <= n; i ++){ root[i] = true; } for(int i = 0; i < n - 1; i ++){ int st, ed; scanf("%d %d", &st, &ed); root[ed] = false; s[st].push_back(ed); th[i + 1].Max = i + 1; th[i + 1].Min = i + 1; th[i + 1].num = 1; } th[n].Max = n; th[n].Min = n; th[n].num = 1; for(int i = 1; i <= n; i ++){ if(root[i]){ k = i; break; } } //cout << k; //k 는 루트 노드 dfs(k); cout << ans << endl; return 0; }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[BOJ] 5568 카드 놓기아이디어 Level이 0일 때, 즉 아직 카드를 고르지 않았을 때 StringBuilder를 생성하고 sb에 고른 카드를 담도록 하였다. 이후 해당 노드 탐색을 종료하면 sb에 담은 카드를 삭제해 주었다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.