POJ 2446 匈牙利算法】的更多相关文章

题意: 思路: 二分图匹配... // by SiriusRen #include <cmath> #include <cstdio> #include <cstring> using namespace std; #define N 1111 int n,m,k,xx[]={1,-1,0,0},yy[]={0,0,1,-1},jyx,jyy,T,fa[N],ans=0; bool a[N][N],map[35][35],vis[N]; bool dfs(int x){…
题目链接:https://cn.vjudge.net/problem/POJ-1904 自己一开始的想法,打算用匈牙利算法实现,找二分图的最大匹配.但是打了打发现,不太好实现.原因如下:匈牙利算法是不停的找增广路.如果这个题用匈牙利算法实现的时候,就是这个地方: bool Find(int t) { ; i<=m; i++) { ) { Exit[i]=; ||Find(net[i])) { net[i]=t; return true; } } } } ,这个是找到合法的就返回,无法把所有的情况…
一开始预习是百度的算法 然后学习了一下 然后找到了学长的ppt 又学习了一下.. 发现..居然不一样... 找了模板题试了试..百度的不好用 反正就是wa了..果然还是应当跟着学长混.. 图两边的点分别是行数和列数 每有一个点 就让所处行列连一条边 求最小点覆盖 然后卡住...后来看了增林的博客... 最小点覆盖=最大匹配数 果然是模板题.. 然后wa.. 后来发现是当进行对左边点的遍历的时候 每次都要mem一次vis数组 应该是每次找之前都重新清空啊..不然下次怎么找啊...增光路对点的是否被…
题意: 给出一个N*N的地图N   地图里面有K个障碍     你每次可以选择一条直线 消除这条直线上的所有障碍  (直线只能和列和行平行) 问最少要消除几次 题解: 如果(x,y)上有一个障碍 则把X加入点集 V1 .Y加入点集V2   并且X Y连一条边  这样构成一个新图 如果选择 V1中的点 X 那么就相当于消去 (X,y)中的所有Y    要找使最小点覆盖 那就是跑一遍 匈牙利就行了 详细证明见二分图最小点覆盖König定理 其中 x y需要连单向边 不然会造成混乱 因为x=1 y=1…
思路:最大匹配 也是很裸的一道题-. // by SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 500 int n,tot=0,first[N],v[N*N],next[N*N],jy,xx,yy,ans=0,vis[N],fa[N]; void add(int x,int y){v[tot]=y,next[tot]=f…
思路:最大匹配 (很裸) // by SiriusRen #include <cmath> #include <cstdio> #include <cstring> using namespace std; #define N 205 int n,tot=0,first[N],v[N*N],next[N*N],m,s,V,vis[N],fa[N],ans=0; double ax[N],ay[N],bx[N],by[N]; void add(int x,int y){v…
题目链接:http://poj.org/problem?id=1466 Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 12026   Accepted: 5355 Description In the second year of the university somebody started a study on the romantic relations between the stu…
传送门:http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K asteroids (…
http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利用这个武器摧毁所有的小行星最少需要几发光束. 主要是构图,将每一行当成一个点,构成集合1,每一列也当成一个点,构成集合2,每一个障碍物的位置坐标将集合1和集合2的点连接起来,也就是将每一个障碍物作为连接节点的边,这样可以得出本题是一个最小点覆盖的问题==二分图的最大匹配. 就可以通过匈牙利算法求解.…
题目传送门 /* 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 */ #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; ; const int INF = 0x3f3f3f3f; ][]; ][]; boo…