珂朵莉的值域連續段(有向樹,dfs)

2021-08-14 05:28:19 字數 2161 閱讀 7310

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 131072k,其他語言262144k

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

分析:乙個子樹值域連續當且僅當其子樹max-min+1=size

dfs1.手動構造樹

#include 

using

namespace

std;

#define mem(a,n) memset(a,n,sizeof(a))

#define rep(i,a,n) for(int i=a;i#define pb push_back

#define fi first

#define se second

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double eps=1e-6;

const

int inf=0x3f3f3f3f;

const

int n=1e5+5;

int ans,mx[n],mn[n],sz[n],cnt;

bool vis[n];

int head[n];

struct edge

e[n];

void addedge(int u,int v)

; head[u]=cnt;

}void dfs(int rt,int f)

if(mx[rt]-mn[rt]+1==sz[rt]) ans++;

}int main()

rep(i,1,n+1)

}printf("%d\n",ans);

}return

0;}

2.使用vector

#include 

using

namespace

std;

#define mem(a,n) memset(a,n,sizeof(a))

#define rep(i,a,n) for(int i=a;i#define pb push_back

#define fi first

#define se second

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double eps=1e-6;

const

int inf=0x3f3f3f3f;

const

int n=1e5+5;

int ans,mx[n],mn[n],sz[n];

bool vis[n];

vector

e[n];

void dfs(int rt)

if(mx[rt]-mn[rt]+1==sz[rt]) ans++;

}int main()

int root;

rep(i,1,n+1)

if(!vis[i])

printf("%d\n",ans);

}return

0;}

珂朵莉的值域連續段

珂朵莉的值域連續段 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 珂朵莉給你乙個有根樹,求有多少個子樹滿足其內部節點編號在值域上連續 一些數在值域上連續的意思即其在值域上構成乙個連續的區間 輸入描述 ...

牛客練習賽9 B 珂朵莉的值域連續段

一定要注意題目中的 連續 即只需要記錄子樹中的三個要素 最小值min 最大值max和節點個數size 做個dfs遍歷一遍樹,每棵樹的節點size等於本身1 全部子樹的size,max min也是本身與全部子樹的max min比較 include include include include inc...

校門外的樹 珂朵莉樹

題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是11公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸00的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表...