随笔分类 -  并查集

摘要:题目:http://acm.timus.ru/problem.aspx?space=1&num=1671题意:给你 N 个点 和 M 条边,然后删除其中的一些边,问删除一些边后剩余的几块用并查集逆向的把要删的边加入进去,加入的时候统计。先是全部输入,然后标记要删除的边,把不需要删除的边用并查集合并,然后逆向的把要删的边加上,每加一条边时看看现在的快有几个View Code 1 typedef long long ll; 2 #define N 100001 3 int num[N]; 4 int f[N]; 5 int cnt[N]; 6 struct node 7 { 8 int . 阅读全文
posted @ 2012-09-08 10:15 AC_Girl 阅读(213) 评论(0) 推荐(0)
摘要:题目:http://poj.org/problem?id=2492题意:给出一些虫子,然后给出一些关系,每行的两个数 x y 表示 x 和 y 可以交配,问你是否可以在里面找出同性恋思路:利用并查集记录他们的祖先,需要再用一个数组保存他们属于的种类,1代表一个类,0代表另一个类,在递归找祖先时同时给他们分类。然后询问的时候看他们是不是一个祖先,如果是一个祖先然后看他们是不是同一类,如果是证明他俩是同性恋;如果他们的祖先不相同,那么就要进行合并操作,同时修改一个祖先的类View Code 1 #include <stdio.h> 2 #include <string.h> 阅读全文
posted @ 2012-08-03 21:29 AC_Girl 阅读(188) 评论(0) 推荐(0)
摘要:就是简单的并查集应用,直接套模板都不带有改动的 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 #define N 30001 6 int a[N]; 7 int find(int x) 8 { 9 if(a[x]!=x) return a[x]=find(a[x]);10 return a[x];11 }12 int main()13 {14 int i,k;15 int n,m;16 while(cin>>n>& 阅读全文
posted @ 2012-03-05 19:41 AC_Girl 阅读(131) 评论(0) 推荐(0)
摘要:这是一道并查集的简单题目,只要套用并查集的模板就可以了。题目的意思:输入一个n和m,接下来的m行,给出两个数x和y表示x和y有关系(你可以默认为他们信的一个宗教)。最后让你输出一共可以找到几个不同的宗教。 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 #define N 50010 6 int a[N]; 7 int find(int x) 8 { 9 if(a[x]!=x) return a[x]=find(a[x]);10 re 阅读全文
posted @ 2012-03-05 18:50 AC_Girl 阅读(174) 评论(0) 推荐(0)