BZOJ4690 Never Wait for Weights(带权并查集模板题)
来源:互联网 发布:四九圣尊兑换码 淘宝 编辑:程序博客网 时间:2024/06/03 20:22
题意:
一共有n个物品;输入:? a b w 表示b比a重w,! a b 表示输出b比a重多少;
思路:
对每个? a b w;建立a、b的并查集,维护dis数组。dis[x]表示x比x的父亲fa[x]重多少;
代码:
#include <bits/stdc++.h>using namespace std;int fa[100100];long long dis[100100];int n,m;int fi(int x){ if(fa[x]==x) return x; int root = fi(fa[x]); dis[x] += dis[fa[x]]; fa[x] = root; return root;}void uni(int x,int y,int d){ int fx = fi(x); int fy = fi(y); if(fx!=fy) { fa[fy] = fx; dis[fy] = dis[x]-dis[y]+d; }}int main(){ while(~scanf("%d%d",&n,&m)&&(n!=0||m!=0)) { memset(dis,0,sizeof(dis)); for(int i = 0;i<=n;i++) fa[i] = i; while(m--) { char s[5],op; int a,b,w; scanf("%s",s); op = s[0]; if(op=='!') { scanf("%d%d%d",&a,&b,&w); uni(a,b,w); } else { scanf("%d%d",&a,&b); if (fi(a)!=fi(b)) printf("UNKNOWN\n"); else printf("%d\n",dis[b]-dis[a]); } } } return 0;}
阅读全文
1 0
- BZOJ4690 Never Wait for Weights(带权并查集模板题)
- Never Wait for Weights(带权并查集)
- BZOJ4690 Never Wait for Weights
- [bzoj4690]Never Wait for Weights
- 2012-2013 ACM-ICPC, Asia Tokyo Regional Contest F.Never Wait for Weights(带权并查集模板)
- [BZOJ]4690: Never Wait for Weights 带权并查集
- UVALive 6187 Never Wait for Weights(并查集)
- BZOJ[4690]Never Wait for Weights 加权并查集
- bnu 33684 Never Wait for Weights (权值并查集)
- UESTC 1832 - Never Wait for Weights 并查集 (2012 Tokyo)
- bzoj 4690: Never Wait for Weights (加权并查集)
- HYSBZ 4690 Never Wait for Weights(变种并查集)
- UVALive 6187_Never Wait for Weights(带权并查集)
- Never Wait for Weights
- 4690: Never Wait for Weights
- uestc oj 1832 Never Wait for Weights
- 【BZOJ】4690 Never Wait for Weights
- 带权并查集模板
- mysql事件调度
- win10系统下如何打开bios&如何打开Intel-VT-x教程
- android开发异常积累
- P1040 加分二叉树 记忆化搜索
- 第(一到四)课易语言大漠多线程创建线程
- BZOJ4690 Never Wait for Weights(带权并查集模板题)
- 网上学习总结
- 最大上升子序列
- dubbo-admin在jdk1.8下报错问题(已解决)
- Neighbor House
- C++ 高精度加法 高精度减法 高精度乘法1
- 《算法(第四版)》 1.3.10 中序转后序
- PL/SQL语言&存储过程&存储函数
- G