bzoj 1098】的更多相关文章

题目链接:BZOJ - 1098 题目分析 只有两个点之间有边的时候它们才能在不同的楼内,那么就是说如果两个点之间没有边它们就一定在同一座楼内. 那么要求的就是求原图的补图的连通块. 然而原图的补图的边数是 n^2 级别的,非常庞大,我们不能直接把补图求出来. 可以使用一种用链表优化BFS的做法,开始时将所有的点加到一个链表里. 每次找一个连通块的时候BFS,在链表中取出一个点,在链表中删除,加入队列,然后每次取出队首元素x,枚举x的每一条边,将边的终点y从链表中删去,加到一个临时的链表中存储.…
对于关系,看其是否是“等价关系”,即满足:自反,传递,对称. 如果是可以用并查集来连接等价类. 这道题是求原图补集的联通快个数,考虑原图度最少的点(由鸽巢原理,最多为2*e/n个). 先将未与其连边的点并在一个集合中,然后再用剩下的点暴力,每次O(n),最多暴力O(2*e/n)次,所以总的复杂度是O(e)的. /************************************************************** Problem: 1098 User: idy002 Lan…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1098 [题目大意] 现在有一张图,要求将这张图的点划分为尽量多的分组,对于不同分组的两个点 要求必须存在连边. [题解] 不同分组之间的两点必须连边等价于没有连边的点一定在同一分组内, 所以题目转化为求反图的连通块和其大小,搜索的理论复杂度O(n^2),显然不行, bfs的时候对于已经归入其余连通块的点用并查集进行段无效信息处理,减少搜索树的分支, 显然经过这样的处理搜索分支的数量下…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 求补图的连通块大小.与自己没有边的和自己在一个连通块里. 用链表把所有点串起来.先给自己有边的打上标记,删掉自己,然后访问链表里的元素:没有标记的就从链表里删掉并加入栈,对每个栈里的元素重复这个操作直到栈空.一次弄出一个连通块. 这样链表里的元素越删越少,时间复杂度分析一下的话,每个点被删掉一次,其余的访问是因为有边,所以总复杂度O(n+m). #include<iostream>…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 首先,没有连边的人一定得在一个连通块里: 先把所有人连成一个链表,然后从第一个人开始,把和它有连边的人都打上标记,没有标记的就加入栈里,并在链表中删除: 只要栈里还有值,就重复这个操作,把必须和栈顶元素在一个连通块的元素也都找出来加入栈,同时 siz++: 因为链表维护,所以遍历人的复杂度总体是 O(n) 的,再加上遍历边的复杂度,算下来是 O(n+m): 关键在于用链表降低遍历人的…
题意很好理解,求给出图反图的联通块个数. 考虑这样一个事情:一个联通块里的点,最多只会被遍历一次,再遍历时没有任何意义 所以用链表来存,每遍历到一个点就将该点删掉 #include<cstdio> #include<cstring> #include<iostream> #include<vector> #include<algorithm> using namespace std; #define N 100005 int e=1,head[N…
Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的 电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼.FG D希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境.但是,为了联 系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有彼此的电话号码. Input 第一行包含两个整数N(2<=N<=100000)和M(1<…
补图连通块个数这大概是一个套路吧,我之前没有见到过,想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法,但进行巧妙的实现,就可以分析出它的上界不会超过 $O(n + m)$. 接下来介绍一下这个技巧: 很显然一个不在原图中的边一定在补图中出现,如果我们考虑用朴素的$Bfs$求一个图中的连通块个数,对于当前的一个点$x$,枚举它连出去的边进行拓展即可. 如果是求补图中的,那对于当前队首的点$x$,可以枚举其他所有的点,看是否和这个点有连边,没有就拓展. 一个可以的优化就是,一个点在$B…
[POI2007]办公楼biu Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1543  Solved: 743[Submit][Status][Discuss] Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼.FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员…
求补图连通块,用链表优化,势能O(n+m) #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 100010 using namespace std; inline int read() { ; char ch=getchar(); ')ch=getchar(); ') { sum=(sum<<)+(sum<<)+…