上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 57 下一页

2011年7月19日

二分图匹配----匈牙利算法之五

摘要: poj 3041 Asteroids//矩阵的行是集合X,矩阵的列是集合Y,将矩阵每一行看成集合X的点,每一列看成集合Y的点,//这样构成一个二分图,题目就是求二分图的最小覆盖点集(即最少的行和列),转化成二分图的最大匹配poj 3041 Asteroids#include<iostream> //求二分图的最小覆盖点集#include<cstring>using namespace std;int n,k,r,c;int edge[600][600],vis[600],result[600];bool find(int a){ for(int i=1;i<=50 阅读全文

posted @ 2011-07-19 21:38 sysu_mjc 阅读(151) 评论(0) 推荐(0) 编辑

二分图匹配----匈牙利算法之四

摘要: poj 2239 Selecting Courses//题意:一共有n门课程,每门课都有对应的几个可以选择的上课时间,为星期几的第几节。问你最多可能选择几门课?poj 2239 Selecting Courses#include<iostream> //二分图的最大匹配#include<cstring>using namespace std;int n,t,p,q;int edge[400][100],vis[100],result[100];bool find(int a){ for(int i=0;i<=83;++i) //当p=7,q=12,(p-1)*12 阅读全文

posted @ 2011-07-19 21:37 sysu_mjc 阅读(116) 评论(0) 推荐(0) 编辑

二分图匹配----匈牙利算法之三

摘要: poj 1325 Machine Schedule/*转自http://hi.baidu.com/%8E%E1%D0%B3/blog/item/b26cbd0a03b134dc62d98609.html:题意: 有两台机器A和B,分别有n种和m种不同的模式,有k个工作,每个工作都可以在那两个机器的某种特定的模式下处理,如job[0]既可以在A机器的3号模式下处理,也可以在B机器的4号模式下处理,机器的工作模式改变只能通过重启来改变,通过改变工作的顺序和分配每个工作给合适的机器可以减少重启机器的次数,题目要求的就是重启机器的最小次数,初始时两台机器都在0号模式下工作.这里假设某工作在A机器上的. 阅读全文

posted @ 2011-07-19 21:36 sysu_mjc 阅读(157) 评论(0) 推荐(0) 编辑

二分图匹配----匈牙利算法之二

摘要: poj 1469 COURSES//题意:现在有p门课程和n个学生,现在需要有由p个学生组成的组织,该组织满足每个学生代表一门课程以及每门课程只能由一个学生代表,//现给出每门课程都有哪些学生可以参加,要求判断是否存在满足题意所需要的组织.//求解二分图的最大匹配数,如果与p相等就输出"YES",否则输出"NO".poj 1469 COURSES#include<iostream> //二分图的最大匹配#include<cstring>using namespace std;int p,n;int result[301]; //r 阅读全文

posted @ 2011-07-19 21:34 sysu_mjc 阅读(140) 评论(0) 推荐(0) 编辑

二分图匹配----匈牙利算法之一

摘要: #include<iostream> //二部图匹配--匈牙利算法#include<cstring>using namespace std;int n1,n2,m;int result[101]; //result记录V2中的点匹配的点的编号int edge[101][101],vis[101]; //vis记录V2中的每个点是否被搜索过bool find(int a){ for(int i=1;i<=n2;++i) { if(edge[a][i]==1&&vis[i]==0) //如果节点i与a相邻并且未被查找过 { vis[i]=1; //标记 阅读全文

posted @ 2011-07-19 21:32 sysu_mjc 阅读(149) 评论(0) 推荐(0) 编辑

转载:二部图最小覆盖点集等于最大匹配-----König定理及其证明

摘要: 二分图最大匹配的König定理及其证明König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数。如果你还不知道什么是最小点覆盖,我也在这里说一下:假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。比如,下面这个图中的最大匹配和最小点覆盖已分别用蓝色和红色标注。它们都等于3。这个定理相信大多数人都知道,但是网络上给出的证明并不多见。有一些网上常见的“证明”明显是错误的。因此,我在这里写一下这个定理的证明,希望对大家有所帮助。假如我们已经通过匈牙利算法求出了最大匹配(假设它等于M),下面给出的方法可 阅读全文

posted @ 2011-07-19 17:13 sysu_mjc 阅读(360) 评论(0) 推荐(0) 编辑

sicily 1155. Can I Post the lette

摘要: #include <iostream> //求顶点1到n是否可达#include<stdio.h>#include<cstring>using namespace std;int n,m,edge[200][200];int seq[50000],vis[50000];int main(){ while(scanf("%d",&n),n) { memset(edge,0,sizeof(edge)); memset(vis,0,sizeof(vis)); int s,t; scanf("%d",&m); 阅读全文

posted @ 2011-07-19 10:45 sysu_mjc 阅读(359) 评论(0) 推荐(0) 编辑

2011年7月18日

最长上升子序列(LIS)算法

摘要: sicily 1060. Bridging Signals最长严格上升子序列#include<iostream> //最长严格上升子序列(LIS)算法,时间复杂度为O(nlogn)using namespace std;int seq[40010];int main(){ int cases,n,p; cin>>cases; while(cases--) { cin>>n>>p; int rear=-1; seq[++rear]=p; while(--n) { cin>>p; if(p>seq[rear]) //当p==seq[ 阅读全文

posted @ 2011-07-18 23:10 sysu_mjc 阅读(209) 评论(0) 推荐(0) 编辑

sicily 1060. Bridging Signals

摘要: #include<iostream> //最长严格上升子序列(LIS)算法,时间复杂度为O(nlogn)using namespace std;int seq[40010]; //seq[i]是记录在所有最长严格上升子序列的长度为 i 之中,选取结束位置上最小的值int main(){ int cases,n,p; cin>>cases; while(cases--) { cin>>n>>p; int rear=0; seq[++rear]=p; while(--n) { ... 阅读全文

posted @ 2011-07-18 22:00 sysu_mjc 阅读(149) 评论(0) 推荐(0) 编辑

sicily 1376. Monthly Expense

摘要: //题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份都是连续的天),//要求每份的和尽量少,输出这个和。//一开始二分的上界为n天花费的总和(相当于分成1份),下界为每天花费的最大值(相当于分成n份),//然后二分,每次的mid值为(上界 + 下界)/ 2,然后根据mid值遍历n天花费,对花费进行累加,//每当超过mid值 份数++,看看这个mid值能把n天分成几份,如果份数大于m,表示mid偏小,下界 = mid + 1,//反之小于等于mid,上界 = mid,然后输出最后的mid值即可,复杂度为 O(nlogM)#include <iostream>#inclu 阅读全文

posted @ 2011-07-18 19:09 sysu_mjc 阅读(251) 评论(0) 推荐(0) 编辑

上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 57 下一页

导航