上一页 1 ··· 5 6 7 8 9 10 11 12 下一页

2013年4月10日

ZOJ 1084 贪心 给顶点染色,相邻顶点不能染同样的颜色 算法有问题不能保证是最优解但能A

摘要: 贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 30 4 int n; 5 bool edge[MAXN][MAXN]; 6 int color() 7 { 8 int vet[MAXN]; 9 int c[MAXN];10 int i,j;11 memset(vet,0xff,sizeof(vet));12 for( i=0; i<n; ++i)13 {14 memset(c,0,sizeof(c));15 for( j... 阅读全文

posted @ 2013-04-10 23:27 allh123 阅读(241) 评论(0) 推荐(0) 编辑

Zoj 1119 POJ 1523 SPF 求关节点及删除关节点会出现多少个连通分量 Tarjan算法

摘要: 有最朴素的想法就是依次删除每个点,看剩下的图有多少个连通分量,如果只有一个,不是关节点(也叫割点),否则是关节点。这种算法的复杂度是O(n^3).这里的Tarjan算法的复杂度只有O(n^2),在连通图中只做一次DFS,根据DFS时遍历结点的先后顺序,依次给每个结点编号,这个编号叫该点的深度值,存在数组dfn[]中求每个点的low[]值,low值是这样求的,每个点的low值最初就是该点的深度值。然后看该点的邻接点,如果该点的邻接点被访问过了,low值就是min(low[自己],dfn[邻接点])。如果未被访问过,父结点的 low值=min(low[自己],low[子结点]),如果出现子结点的l 阅读全文

posted @ 2013-04-10 19:17 allh123 阅读(212) 评论(0) 推荐(0) 编辑

2013年4月9日

POJ 1469 ZOJ 1140 Courses 二分图匹配

摘要: 继续匈牙利二分匹配,其实我都不知道怎样写匈牙利算法,只是记住了可以这样写,悲哀啊唉````裸的二分匹配,贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXC 105 4 #define MAXS 305 5 bool g[MAXC][MAXS]; 6 bool used[MAXS]; 7 int p,n; 8 int xx[MAXC],yy[MAXS]; 9 void init()10 {11 int i,j;12 scanf("%d%d",&p,& 阅读全文

posted @ 2013-04-09 22:39 allh123 阅读(214) 评论(0) 推荐(0) 编辑

Zoj 1364 Poj 1325 Machine Schedule 二分图匹配 匈牙利算法 求点覆盖数等价于求匹配数

摘要: 这题就是A机器有n 种模式,B机器有m种模式一共有k件任务,每件任务既可在A机器的某个模式下完成,也可以在B机器的某个模式下完成。由于机器转换模式要重启,求重启的最少次数,两机器最初的模式是0所以如果某任务可以在A机器或者B 机器的0模式下进行,这件任务就可以不考虑。把A,B机器的每个模式看成顶点。如果某任务可以在A机器的模式i 和B机器的模式j下完成,那么i和j 建一条边,该题可转换为找最小的顶点数,覆盖掉所有出现的边(相当于完成了所有的工作)。而有定理,点覆盖数 = 匹配数,所以,把按如上方式构造出的图求一个最大匹配,其匹配数就是所求,记住去掉所有可以用0模式完成的工作(这些工作不用建边) 阅读全文

posted @ 2013-04-09 21:20 allh123 阅读(117) 评论(0) 推荐(0) 编辑

ZOJ 1654 匈牙利算法 二分图匹配 Place the Robots

摘要: 给每行上的空地编不同号,就算在同一行上,但是被墙壁隔开了的话也编不同的号,一个编号对应一个顶点,这样的顶点放在集合XI中。给每列上的空地编不同号,就算在同一行上,但是被墙壁隔开了的话也编不同的号,一个编号对应一个顶点,这样的顶点放在集合YI中。如果XI中的某个顶点i和YI中的某个顶点j是在同一个空地上,那么i和j有一条边相连。通过如上方法构造出一个二部图(也叫二分图),然后用匈牙利算法做最大二部图匹配,就OK了,我是通过DFS寻找增广路。贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MA 阅读全文

posted @ 2013-04-09 20:17 allh123 阅读(141) 评论(0) 推荐(0) 编辑

POJ 1459 ZOJ 1734 Power Network dinic 算法 网络流

摘要: 裸的网络流,就是在读数据的时候,注意用while(getchar()!='(');scanf("%d,%d),%d");然后增加超源点与超收点。我是用dinic算法,速度慢,跑了549貌似ms,貌似,希望能优化,用个什么预流推进算法试试啊。在纠结了很久后,终于在书上把预流推进算法抄下来了,哈哈,调试了很久,一直陷入死循环,后来一看输入文件不是这个题的输入,想shi啊,有木有贴代码 dinic 算法 :View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 10 阅读全文

posted @ 2013-04-09 15:43 allh123 阅读(173) 评论(0) 推荐(0) 编辑

POJ 2112 Optimal Milking dinic算法 网络流+二分

摘要: 思路就是先用floyd算出奶牛到挤奶器的最短距离,然后二分查找最大距离的最小值,构造出满足任何奶牛到挤奶器的距离都小于该最小值的网络流,求一个最大流,如果该值等于奶牛的数目,就是可行方案,然后最小值还可以少点,如果不可行,最小值得增大。加入超源点与超收点,超源点到每头奶牛建边,容量为1,每个挤奶器到超收点建边,容量为m。其实这题用二分匹配判可行会更好。求网络的最大流用的是dinic算法,不太理解,抄的书上的代码。以下为代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define INF 300000000 阅读全文

posted @ 2013-04-09 13:22 allh123 阅读(216) 评论(0) 推荐(0) 编辑

2013年4月8日

POJ 1273 Drainage Ditches 一般增广路算法,网络流

摘要: 看到Ci最大可以到10 000 000,N<=200,M<=200,我以为用这个算法会超时,据说该算法的复杂度是N*M*C,C为最大流量值。但是显然没超,可能是数据弱神马的,不知道没什么思路说的,就是裸的网络最大流,我的代码和上一个题 pigs(麦克卖猪)的代码基本上相同,下面贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 205 4 #define MAXM 205 5 #define INF 300000000 6 struct Arc 7 { 8 int c,f 阅读全文

posted @ 2013-04-08 20:25 allh123 阅读(177) 评论(0) 推荐(0) 编辑

PIGS POJ 1149 网络流

摘要: //以顾客为点,再添加超源点与超收点,如果顾客i是第一个打开j猪圈的,那么从超源点到顾客i有一条边,//容量为猪圈j中猪的数目.如果出现重边,和合并,容量值相加。//如果顾客i紧接着顾客j打开猪圈k,则顾客 i可以想顾客j连一条边,容量为正无穷//从每个顾客向超收点连一条边,容量为每个顾客想买的猪的数目。//这个网络流从0流开始增广View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 107 //顾客数 4 #define MAXM 1007//猪圈数 5 #define INF 300000 阅读全文

posted @ 2013-04-08 19:37 allh123 阅读(164) 评论(0) 推荐(0) 编辑

2013年4月4日

ZOJ 1508 poj 1201 Intervals 差分约束系统

摘要: 比较巧妙的是令s[i]为集合Z中小于等于i的元素个数。则得到不等式组s[ai-1] - s[bi] <= -ci;还有隐含条件s[i] - s[i-1] <=1 && s[i]-s[i-1] >= 0用Bellman写感觉还不错,清晰明了。抄书上的思路的。贴代码:View Code 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 50005 4 int n,min,max; 5 struct Arc 6 { 7 int u,v,w; 8 } edge[MAXN]; 9 in 阅读全文

posted @ 2013-04-04 19:51 allh123 阅读(186) 评论(0) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 下一页

导航