【Day8】学习树的存储、遍历,做了相关题目
就……结构体,递归,vector的综合运用?
主要难点就是存储和遍历,其他因题而异
【Day9】学习并查集、图
就……不断的找祖先?
通用函数:
int get(int x, int y)
{
return x * n + y;
}
int find(int x)
{
if (x == fa[x]) return x;
return fa[x] = find(fa[x]);
}
格子游戏:二维转一维(x * n + y)
团伙:增添“敌人的敌人是朋友”的概念,在原先基础上增添 {
if (enemy[u] == 0) enemy[u] = find(v);
else merge(v, enemy[u]);
if (enemy[v] == 0) enemy[v] = find(u);
else merge(u, enemy[v]);
}的分类讨论
搭配购买:并查集+01背包
打击犯罪:与图结合
下午学图,印象深刻(也是很恶心)的是链式前向星
struct node
{
int to, w, next;
}edge[20005];
int head[305]; //链式前向星
void add(int u, int v, int w)
{
edge[++cnt] = {v, w, head[u]};
head[u] = cnt;
}
int main()
{
int n, m;
cin >> n >> m;
memset(head, -1, sizeof head);
for (int i = 1; i <= m; i++)
{
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
//add(v, u, w); //无向图
}
ps:一天下来脑子根本不够用,想似(bushi)