摘要: http://poj.org/problem?id=1422典型的最小路径覆盖题,城市之间单向相连,无环!问最少用多少个伞兵能遍历这张图。根据定理:最小路径覆盖=顶点数-最大匹配数Source Code #include<stdio.h>#include<stdlib.h>#include<string.h> int nx, ny; // X的點數目、Y的點數目 int mx[121], my[121]; // X各點的配對對象、Y各點的配對對象 bool vy[121]; // 紀錄Graph Traversal拜訪過的點 bool adj[121][12 阅读全文
posted @ 2011-02-09 22:48 CoderZhuang 阅读(151) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2226这个题的原型应该是Asteroids的变种,刚看了这道题,一眼就看出了是最小覆盖,看来我理解了最小覆盖的内在含义了。农夫John的养牛场,是一个R行C 列的矩形,一场大雨后,养牛场低洼的地方都有了积水。John 的牛都很娇贵的,他们吃草的时候,不想把他们的蹄子给弄脏了。为了不让牛儿们把它们的蹄子弄脏,John 决定把有水的地方铺上木板。他的木板是宽度为1,长度没有限制的。 他想用最少数目的木板把所有有水的低洼处给覆盖上,前提是木板不能覆盖草地,但是可以重叠。Sample:4 4*.*..******...*.把行里面连在一起的坑连起来 阅读全文
posted @ 2011-02-09 18:17 CoderZhuang 阅读(163) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1469学生选课问题,基础匹配问题。有p节课,n个学生,每节课可以由指定的几个学生参加,但是每个学生只能参加一节课。现在问能不能找到一些学生使得他们:1.每个学生匹配不同的一节课2.每节课匹配一个学生。就是求个最大匹配,看看匹配数是不是等于课程数。如果相等不就满足要求了么.Source Code #include<stdio.h> #include<stdlib.h> #include<string.h> int nx, ny; // X的點數目、Y的點數目 int mx[302], my[1... 阅读全文
posted @ 2011-02-09 14:44 CoderZhuang 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 题目的意思大致就是,一个矩形中,有N个城市,现在这n个城市都要覆盖无线,若放置一个基站,那么它至多可以覆盖相邻的两个城市。问至少放置多少个基站才能使得所有的城市都覆盖无线?构图:行扫描所有城市,编号,如果有城市相邻就连一条边,当然如果3和4相邻,首先graph[3][4]=1,当扫描到4时graph[4][3]也连一条边,最后只需要取一半即可.求最大匹配的一半,这样可以得到所有2个相邻城市被一个基站覆盖所需要的基站数。然后再加上独立的那些基站即可。公式是:N-最大匹配(代表所有可以和相邻城市配对的城市数)+最大匹配/2=N-最大匹配/2; Source Code #include<std 阅读全文
posted @ 2011-02-09 09:02 CoderZhuang 阅读(158) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3041在N*N的平面上有K颗小行星,现在你要摧毁他们,你的每一发子弹可以摧毁同一行,或者是同一列上的小行星,现在问你最少要多少子弹才能摧毁所有的小行星?构图:如果在i行j列上有一颗小行星 则graph[i][j]=1,再求最大匹配即可。这一题用到的结论是 :最小顶点覆盖 = 最大匹配(最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联) #include<stdio.h>#include<stdlib.h>#include<string.h> int nx, ny; // X的點 阅读全文
posted @ 2011-02-09 00:01 CoderZhuang 阅读(124) 评论(0) 推荐(0) 编辑