日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

牛客练习赛9 B - 珂朵莉的值域连续段

發(fā)布時(shí)間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客练习赛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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。