AcWing算法提高课【第四章高级数据结构】并查集
2021/4/24 20:25:32
本文主要是介绍AcWing算法提高课【第四章高级数据结构】并查集,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1250. 格子游戏
分析:
显然,当出现闭环的时候,就会出现我们当前节点和要到达的节点出现一个闭环
代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int N = 210; 6 7 int n, m; 8 int g[N][N], tot; 9 int f[N * N]; 10 11 int get(int x) 12 { 13 return f[x] == x ? x : f[x] = get(f[x]); 14 } 15 int main() 16 { 17 cin >> n >> m; 18 for (int i = 1; i <= n; i ++ ) 19 for (int j = 1; j <= n; j ++ ) 20 g[i][j] = ++ tot; 21 22 for (int i = 1; i <= n * n; i ++ ) f[i] = i; 23 24 for (int i = 1; i <= m; i ++ ) 25 { 26 int a, b; 27 char op[2]; 28 cin >> a >> b >> op; 29 30 int x = g[a][b], y; 31 if (*op == 'D') 32 y = g[a + 1][b]; 33 else 34 y = g[a][b + 1]; 35 36 x = get(x), y = get(y); 37 if (x == y) 38 { 39 cout << i << endl; 40 return 0; 41 } 42 f[x] = y; 43 } 44 45 cout << "draw" << endl; 46 47 return 0; 48 }View Code
1252. 搭配购买
分析:
显然,彩云被捆绑了。通过并查集捆绑,祖宗节点为fa[x] == x
打包后就是一个0/1背包了。判断是否取当前的祖宗节点。
代码:
1 #include <cstdio> 2 #include <cmath> 3 4 using namespace std; 5 6 const int N = 10010; 7 8 int n, m, t; 9 int v[N], w[N]; 10 int fa[N]; 11 int dp[N]; 12 13 int get(int x) 14 { 15 return fa[x] == x ? x : fa[x] = get(fa[x]); 16 } 17 int main() 18 { 19 scanf("%d%d%d", &n, &m, &t); 20 for (int i = 1; i <= n; i ++ ) 21 { 22 fa[i] = i; 23 scanf("%d%d", &v[i], &w[i]); 24 } 25 26 while (m -- ) 27 { 28 int x, y; scanf("%d%d", &x, &y); 29 x = get(x); 30 y = get(y); 31 if (x == y) continue; 32 fa[x] = y; 33 v[y] += v[x]; 34 w[y] += w[x]; 35 } 36 37 for (int i = 1; i <= n; i ++ ) 38 if (i == fa[i]) 39 for (int j = t; j >= v[i]; j -- ) 40 dp[j] = max(dp[j], dp[j - v[i]] + w[i]); 41 42 printf("%d\n", dp[t]); 43 44 return 0; 45 }View Code
这篇关于AcWing算法提高课【第四章高级数据结构】并查集的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享