博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集(图论) LA 3644 X-Plosives
阅读量:5955 次
发布时间:2019-06-19

本文共 896 字,大约阅读时间需要 2 分钟。

 

题意:训练指南P191

分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个集合就会爆炸.

#include 
using namespace std;const int N = 1e5 + 5;struct DSU { int rt[N], rk[N]; void init(void) { memset (rt, -1, sizeof (rt)); memset (rk, 0, sizeof (rk)); } int Find(int x) { return rt[x] == -1 ? x : rt[x] = Find (rt[x]); } void Union(int x, int y) { x = Find (x); y = Find (y); if (x == y) return ; if (rk[x] > rk[y]) { rt[y] = x; rk[x] += rk[y] + 1; } else { rt[x] = y; rk[y] += rk[x] + 1; } } bool same(int x, int y) { return Find (x) == Find (y); }}dsu;int main(void) { dsu.init (); int ans = 0, x, y; while (scanf ("%d", &x) == 1) { if (x == -1) { printf ("%d\n", ans); dsu.init (); ans = 0; continue; } scanf ("%d", &y); if (dsu.same (x, y)) ans++; else dsu.Union (x, y); } return 0;}

 

  

 

转载于:https://www.cnblogs.com/Running-Time/p/5027108.html

你可能感兴趣的文章
关于Dictionary的线程安全问题
查看>>
在python中单线程,多线程,多进程对CPU的利用率实测以及GIL原理分析
查看>>
数据类型与变量
查看>>
CentOS6.5+mysql5.1源码安装过程
查看>>
Js 笔记
查看>>
C++: find()函数的注意事项
查看>>
android studio中添加新的model时候
查看>>
js的事件学习笔记
查看>>
leetcode 【 Add Two Numbers 】 python 实现
查看>>
Android接收系统广播
查看>>
将网络中的图片存为NSData并保存到sqlite的BLOB字段中
查看>>
Cocos2d-js-v3.2 在 mac 上配置环境以及编译到 Andorid 的注意事项(转)
查看>>
iOS用三种途径实现一方法有多个返回值
查看>>
python--class test
查看>>
从零开始理解JAVA事件处理机制(3)
查看>>
HttpURLConnection类的使用
查看>>
linux命令分析---SED (二)
查看>>
MyCat | 分库分表实践
查看>>
黄聪:is_file和file_exists效率比较
查看>>
Linux进程间通信——信号
查看>>