樹的最大獨立集

2021-06-27 00:37:45 字數 1166 閱讀 5946

#include#include#includeusing namespace std;

ifstream fin("c:\\data19.in");

struct node

int data;

int c;

int gc;

struct node* parent;

struct node* left;

struct node* right;

};class bstree

void init();

node* searchnode(node* nd,int n);

void insertnode(int n);

void afterorderwalk(node*);

node* getroot();

void emptytree(node*);

void print(node* nd);

void freshnode(node* nd);

void maxsubnode(node* nd);

private:

node* root;

};void bstree::init()

datanode->parent=y;

if(root==null)

root=datanode;

else }

void bstree::afterorderwalk(node* nd)

}void bstree::emptytree(node* nd)

}node* bstree::getroot()

//採用中序遍歷的方法顯示樹的結構

void bstree::print(node* nd)

else

coutcout<<"(";

print(nd->left);

cout<<",";

print(nd->right);

cout<<")";

}//核心**

//因為要遍歷所有的子節點並在遍歷的過程中更新父節點的資料

//採用後序遍歷的方法

void bstree::freshnode(node* nd)

}void bstree::maxsubnode(node *nd)

樹的最大獨立集

題意 對於一棵有n個結點的無根樹,選出盡量多的結點,使得任何兩個結點均不相鄰 稱為最大獨立集 sol 樹形dp 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...

uva1220樹的最大獨立集

題意 公司裡除了老闆,每個人都有乙個直屬上司,要求選盡量多的人,但不能同時選乙個人和他的直屬上司,問最多能選多少個人,以及在人數最多的情況下方案是否唯一。思路 d u 0 表示不選u點能得到的最大人數d u 0 sum d u 1 表示選u點能得到的最大人數d u 1 sum f u 0 表示不選u...

uva1220 樹的最大獨立集 判重

題意是挑選盡量多的人,並且每個人都不和他的父節點同時出現,很明顯的最大獨立集問題,難點在於如何判斷方案是否唯一。詳情請見劉汝佳 演算法競賽入門經典 第二版 p282 include include include include include include include define inf ...