牛客练习赛9 B - 珂朵莉的值域连续段
生活随笔
收集整理的這篇文章主要介紹了
牛客练习赛9 B - 珂朵莉的值域连续段
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
珂朵莉給你一個(gè)有根樹(shù),求有多少個(gè)子樹(shù)滿(mǎn)足其內(nèi)部節(jié)點(diǎn)編號(hào)在值域上連續(xù)
一些數(shù)在值域上連續(xù)的意思即其在值域上構(gòu)成一個(gè)連續(xù)的區(qū)間
輸入描述:
第一行有一個(gè)整數(shù)n,表示樹(shù)的節(jié)點(diǎn)數(shù)。接下來(lái)n–1行,每行兩個(gè)整數(shù)x,y,表示存在一條從x到y(tǒng)的有向邊。
輸入保證是一棵有根樹(shù)。
輸出描述:
輸出一個(gè)數(shù)表示答案 示例1輸入
5 2 3 2 1 2 4 4 5輸出
5說(shuō)明
節(jié)點(diǎn)1子樹(shù)中編號(hào)為1,值域連續(xù)節(jié)點(diǎn)3子樹(shù)中編號(hào)為3,值域連續(xù)
節(jié)點(diǎn)5子樹(shù)中編號(hào)為5,值域連續(xù)
節(jié)點(diǎn)4子樹(shù)中編號(hào)為4,5,值域連續(xù)
節(jié)點(diǎn)2子樹(shù)中編號(hào)為1,2,3,4,5,值域連續(xù)
備注:
對(duì)于100%的數(shù)據(jù),有n <=100000題解
$dfs$。
只需要統(tǒng)計(jì)每個(gè)子樹(shù)的節(jié)點(diǎn)數(shù)量、最小值以及最大值即可。
#include <bits/stdc++.h> using namespace std;const int maxn = 200000 + 10; int n; int h[maxn], to[maxn], nx[maxn], cnt; int mn[maxn], mx[maxn], sz[maxn], in[maxn];void add(int u, int v) {to[cnt] = v;nx[cnt] = h[u];h[u] = cnt ++; }void dfs(int x) {sz[x] = 1;mn[x] = x;mx[x] = x;for(int i = h[x]; i != -1; i = nx[i]) {dfs(to[i]);sz[x] += sz[to[i]];mn[x] = min(mn[x], mn[to[i]]);mx[x] = max(mx[x], mx[to[i]]);} }int main() {scanf("%d", &n);for(int i = 1; i <= n; i ++) {h[i] = -1;in[i] = 0;}cnt = 0;for(int i = 1; i < n; i ++) {int u, v;scanf("%d%d", &u, &v);add(u, v);in[v] ++;}for(int i = 1; i <= n; i ++) {if(in[i] == 0) {dfs(i);}}int ans = 0;for(int i = 1; i <= n; i ++) {if(mx[i] - mn[i] + 1 == sz[i]) ans ++;}printf("%d\n", ans);return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/zufezzt/p/8151296.html
總結(jié)
以上是生活随笔為你收集整理的牛客练习赛9 B - 珂朵莉的值域连续段的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Zuul:智能路由和过滤(译)
- 下一篇: idea 整合SSM(spring sp