Skip to content

Instantly share code, notes, and snippets.

@rikuTanide
Created January 5, 2020 12:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rikuTanide/3b018dd474a26f04d9e732c83ac2980d to your computer and use it in GitHub Desktop.
Save rikuTanide/3b018dd474a26f04d9e732c83ac2980d to your computer and use it in GitHub Desktop.
Tree DP
struct Triangle {
int parent;
vector<int> children;
};
class Tree {
vector<vector<int>> edges;
public:
Tree(int n) : edges(n) {}
void edge(int i, int j) {
edges[i].push_back(j);
edges[j].push_back(i);
}
void root(int r, vector<Triangle> &leafs) {
queue<int> vs;
vs.push(r);
vector<bool> check(edges.size(), false);
check[r] = true;
while (!vs.empty()) {
int k = vs.front();
Triangle triangle;
triangle.parent = k;
for (int i : edges[k]) {
if (check[i]) continue;
check[i] = true;
triangle.children.push_back(i);
vs.push(i);
}
vs.pop();
leafs.push_back(triangle);
}
reverse(leafs.begin(), leafs.end());
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment