HDU 3081 最大流+并查集】的更多相关文章

题意:有n个男生和n个女生,玩结婚游戏,由女生选择男生:女生可以选择不会和她吵架的男生以及不会和她闺蜜吵架的男生,闺蜜的闺蜜也是闺蜜.问你最多可以进行多少轮,每一轮每个女生只能选择一个之前她没选过的男生. 思路:显然最少进行0轮,最多进行n轮,所以我们可以对轮数进行二分:源点到女生连一条容量为轮数的边,女生到她可选择的男生之间连一条容量为1的边,男生到汇点同样连一条容量为轮数的边,然后跑最大流判断是否满流.找到最大的轮数.要注意的是,每次跑最大流的时候都要重新建图.至于闺蜜的问题用一个并查集就可…
题目链接 一开始是想不断的把边插进去,然后再去考虑我们每次都加进去边权为1的边,直到跑到第几次就没法继续跑下去的这样的思路,果不其然的T了. 然后,就是想办法咯,就想到了二分答案. 首先,我们一开始处理关系,(一开始看错了男女关系,结局懵逼了好久),注意输入是女选男.然后,就是去处理咯,我们先要去考虑,女生之间为朋友的话,又由于朋友关系是可以推的,所以我们不妨用并查集去维护这层关系,并且把总的关系推上到并查集的根上去. 然后,就是怎么样去想这个二分答案的过程了,我们可以假设玩了x轮,这么就代表了…
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0的点个数是否大于1,如大于1则不完全:最终状态检查是否所有点都具有大小关系,遍历过说明有入度.但是由于“=”的存在,要考虑将指向相等数的边全部移到一个数上,故使用并查集预先将相等的点连成块,再进行拓扑排序就行了. /** @Date : 2017-09-22 13:58:31 * @FileName…
hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 思路: 对于一颗树来说,其实就是统计u到v路径上白边的个数, 加边就是将u到v的路径上所有边都染黑,查询就是查询路径上白边的个数 由于树上每条边最多只会被修改一次,所以可以并查集暴力修改,每个点u指向祖先结点第一条白边的位置. 涂黑白边的操作对应点的子树的答案减一,可以用dfs序树状数组维护 所以…
Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4021    Accepted Submission(s): 1309 Problem Description Presumably, you all have known the question of stable marriage match. A…
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232  结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这道题,因为并查集上的数字和下标都是相连的.题目只需要求没有相连的(i == father[i])即可.  注意细节:本题说是从1到N开始计数(虽然测试答案是对的,就是过不了).输入的时候注意最后只是输入一个0就结束了,所以M和N要分开输,即输入N为0的时候. 我的代码:(因为是模板题,建议码友自己写…
http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点对(x,y)使得在x到y的路径上没有一条边的距离大于d. 思路:只要边距离小于d,那就是可行的,直接加入并查集来维护.并查集需要维护一下树的节点个数. 将边和询问都排序离线处理. #include<iostream> #include<cstdio> #include<cstri…
http://acm.hdu.edu.cn/showproblem.php?pid=4313 题意: 给出一棵树,每条边都有权值,其中有几个点是特殊点,现在破坏边还使得这几个特殊点互相不可达,需要使得破坏的边的权值和最小. 思路:解法很妙! 利用并查集,先将每个点分成一个集合,将边按照降序排序,如果该边两边所在的集合没有特殊点或者只有一边有,那么就可以不用删,用并查集合并.如果两边都有特殊点的话,那就只能删处这条边,因为已经排好序了,所以删的边是尽量最小的. #include<iostream>…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐标,当输入Q的时候输入n,然后输出与第n条线段相交的线段有多少条 首先判断线段是否相交,在算法导论p577上有介绍 线段A(x1,y1)-B(x2,y2),所在直线L1方程为F1(x,y)=0;线段C(x3,y3)-D(x4,y4),所在直线L2方程为F2(x,y)=0; 如何判断两条线段有交点:(…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. 解题思路:先用并查集求出所有的连通块,然后判断每个连通块内点的度数,如果有奇数点则需要的组数ans+=奇数点/2:反之,所需组数ans+=1.注意:如果遇到孤立点即度数为0的点则不用算进去,因为没有跟他相连的边. 代码: #include<iostream> #include<cstdio&…