POJ1087DFS+匈牙利或者DINIC】的更多相关文章

题意:      有n个插孔,m个电器,q种转换器(转换器可以无限用),然后问你最多有多少个电器能充电. 思路:       比较简单,就是在建图的时候要考虑下,我用了两种方法做的,一个是最大流,这个方法我的建图是这样,先给每个用电器虚拟出来一个点n,每个插座虚拟出来两个点(限流)m,然后给每个插座或者是插头的类型虚拟出来一个点,这样就ok了,建图是这样 s         -> 所有用电器       1 所有用电器->他所连接的种类    1 种类      ->种类        …
二分图最大匹配模板[匈牙利:Dinic最大流] 匈牙利算法 int n,m; vector<int> map[100010]; int match[100010];//保存匹配的互相点 bool vis[100010]; bool dfs(int u) { for(int j=0;j<map[u].size();j++) { int v=map[u][j]; if(!vis[v]) { vis[v]=true; if(!match[v]||dfs(match[v])) { match[v…
带花树裸题,感觉带花树强强……不会的勿看此文,解释的可能不对,只是给自己看的!!!如题,带花树即为求一般图最大匹配算法(匈牙利与dinic为二分图最大匹配).推荐论文:2015年<浅谈图的匹配算法及其应用>(长郡中学    ——陈胤伯).论文当中有对于带花树算法的详细解析,在这里只想记录一下算法的基本流程: —————————————————————————— \(id\) : 记录一个点为奇点/偶点(0偶1奇). \(fa\) : 并查集记录一个点属于哪一个点为根的花. ——————————…
给你n个字符串,问你最小的长度的前缀,使得每个字符串任意循环滑动之后,这些前缀都两两不同. 二分答案mid之后,将每个字符串长度为mid的循环子串都哈希出来,相当于对每个字符串,找一个与其他字符串所选定的子串不同的子串,是个二分图最大匹配的模型,可以匈牙利或者Dinic跑最大流看是否满流. 一个小优化是对于某个字符串,如果其所有不同的子串数量超过n,那么一定满足,可以直接删去. 卡常数,不能用set,map啥的,采取了用数组记录哈希值,排序后二分的手段进行去重和离散化. #include<cst…
题目描述 n个物品,第i个位置有ai.bi.ci三种属性.每次可以选出满足$\ a_{p_i}<a_{p_{i+1}}\ ,\ b_{p_i}<b_{p_{i+1}}\ ,\ c_{p_i}<c_{p_{i+1}}\ $的一段序列$p_1,p_2,...,p_k$(不要求$p_1,p_2,...,p_k$的大小关系),将这些物品$p_i$消掉.问:(1)一次最多能够消掉的物品的数目. (2)最少需要多少次操作能够把所有物品全部消掉. 输入 第一行一个整数N给出B国导弹的数目. 接下来N行…
部落战争 bzoj-2150 题目大意:题目链接. 注释:略. 想法: 显然是最小路径覆盖,我们知道:二分图最小路径覆盖等于节点总数-最大匹配. 所以我们用匈牙利或者dinic跑出最大匹配,然后用总结点数相减即可. 最后,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 3000 using namesp…
网络最大流 dinic+当前弧优化. const int N=10007,M=100007,inf=1e9; int s,t,head[N],ver[M],edge[M],Next[M],tot=1,cur[N],dep[N];queue<int>q; void add(int u,int v,int w){ver[++tot]=v,Next[tot]=head[u],edge[tot]=w,head[u]=tot,ver[++tot]=u,Next[tot]=head[v],head[v]=…
好久没有更博客了...因为我在颓废学习.. SDOI一轮结束了...我也该回来学地生了... 凉凉 ————————————————我是分割线———————————————— Day0 愉快感冒的Day0... 路上调完了主席树就开始睡觉,基本上是睡了一路,晚上就好起来了[然后Day1我就没调出来我的主席树] 到了以后抽签,我竟然跟孙神抽到了连号!!!激动了一下午[晚上就发现座号是竖着排的] 晚上试机,先是常规试键盘,总是觉得键盘黏糊糊的... 然后敲了个快排优先队列,还有很多时间就又敲了个匈牙…
luogu 匈牙利算法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int n, m, uu, vv, e, lnk[1005], ans; bool a[1005][1005], vis[1005]; bool dfs(int u){ for(int i=1; i<=m; i++){ if(a[u][i] && !vis[i]){ vi…
1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1878  Solved: 937[Submit][Status][Discuss] Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成的网络.每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动.…