上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: 题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况。分析:这是一道定理题,只要知道可图定理,就是so easy了 可图定理:对每个节点的度从大到小排序,取第一个(最大)的度的节点,依次与其后(度)的节点连边,每连一条边,对应的度减1。然后重新排序,重复以上步骤,若度出现负值,则不可图。(若n个点中,某点的度>=n,那么也是不可能的) 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int MAXN=22; 7 8 int a[MAXN],r[MAX. 阅读全文
posted @ 2013-10-03 10:48 Thousand Sunny 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个有向图。1:问至少选出多少个点,才能沿有向边遍历所有节点。2:问至少加多少条有向边,使原图强连通。分析:第一个问题,缩点后找所有树根(入度为0)。第二个问题,分别找出入度为0和出度为0的所有点,去最大值即为答案。 关于第二个问题,与这道题很相似。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=111; 8 9 struct Edge{ 10 int v,next; 11 Edge(){} 12 Edge(in... 阅读全文
posted @ 2013-10-02 16:17 Thousand Sunny 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 题意:给出m个数字,要求组合成能够被n整除的最小十进制数。分析:用到了余数判重,在这里我详细的解释了。其它就没有什么了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int MAXN=5555; 9 const int N=22;10 11 struct Node{12 int pre;13 int r;14 int d;15 };16 17 int vis[MAXN];18 int num[N];19 int n,c,m;20 Node... 阅读全文
posted @ 2013-10-01 17:54 Thousand Sunny 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 题意:略过分析:用m个数字组成一个能够被n整除的c进制数的最小值,实际上本题的关键就在于这个最小值上。 首先确定我们的思路是从小到大寻找。先查看一位数,即查看着m个数字是否能被n整除;若不能,就查看任意可能的两位数组合...可是如此一来,预算量太大。于是我们考虑是否存在冗余量。 已知A,B两个数(A 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int MAXN=5555; 9 const int N=22; 10 11 struct Node{ 12 ... 阅读全文
posted @ 2013-10-01 17:48 Thousand Sunny 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 题意:矩阵中'#'表示墙,'.'表示通路,要求从起点'*'到达终点'X',途中可能遇到一些门(大写字母),要想经过,必须有对应的钥匙(小写字母)。问能否完成,若能,花费的时间是多少。分析:同hdu 1429,只不过这里用map把四种钥匙标号了,否则爆内存。错误:判断门的条件用 isupper(ch) 表示,所以终点'X'也在这个范围内。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 阅读全文
posted @ 2013-10-01 13:25 Thousand Sunny 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 又开始刷题了题意:略过。分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙。状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,key|(x,y)表示捡起了一把钥匙。错误:1、开标记数组mark[][][],key状态大小顺手开成key,其实应该是1 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int MAXN=22; 9 const int KEY=10; 10 11 int dir[4][2]={0,-1... 阅读全文
posted @ 2013-10-01 11:35 Thousand Sunny 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 题意:老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求。在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧。现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学生数量。分析: 1、这里的问题可以抽象成求最大独立集:若两人发生暧昧,则在两人中建边,当四个条件中任意一个成立,则将两个人孤立。老师选择的学生必然是两两之间不会发生暧昧的。 公式:最大独立集=顶点总数V-最小点覆盖 2、这里涉及到离散数学中一些集合的概念,理解起来对在下实属不易,所以就先记住吧。(定义也只是挑重要的记录下来) 独立集:该集合中的点,两两之间不相邻(没有边)(单独一个点就是独... 阅读全文
posted @ 2013-09-02 21:57 Thousand Sunny 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 题意:在方格图上打小怪,每次可以清除一整行或一整列的小怪,问最少的步数是多少,又应该在哪些位置操作(对输出顺序没有要求)。分析:最小覆盖问题 这是一种在方格图上建立的模型:令S集表示“行”,T集表示“列”,那么小怪站的位置w(i,j),就是二分图上的边。如此建图,那么每次清除,就是把与某个点相连的边全部清除,问最少选择多少个点。(这也是最小点覆盖的概念:选择尽量少的点,使得每条边至少有一个端点被选中) 这里有一个König定理:最大二分匹配数==最小覆盖点数。 既然是求最小点覆盖,那么自然是选那些所连边数多的点,不过貌似不好安排啊? 先从简单问题开始讨论:找到必然要选的点。对于一棵树 阅读全文
posted @ 2013-09-02 18:54 Thousand Sunny 阅读(744) 评论(0) 推荐(0) 编辑
摘要: 题意:男女各n人,进行婚配,对于每个人来说,所有异性都存在优先次序,即最喜欢某人,其次喜欢某人...输出一个稳定婚配方案。所谓稳定,就是指未结婚的一对异性,彼此喜欢对方的程度都胜过自己的另一半,那么这对异性就有私奔的可能性。这里明显也是一个匹配问题,与最佳二分完美匹配所不同的是,二分匹配重在求最佳权值,而这里求的是满足彼此的要求。这里用到了Gale-Shapley算法。算法学习:http://wenku.baidu.com/view/964a503843323968011c92c3.html http://wenku.baidu.com/view/7aa841f2fab069dc502... 阅读全文
posted @ 2013-09-01 21:49 Thousand Sunny 阅读(1010) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个N*N的方格中,各有一个整数w(i,j),现在要求给每行构造row(i),给每列构造col(j),使得任意w(i,j) 2 #include 3 #include 4 #include 5 #define clr(a,m) memset(a,m,sizeof(a)) 6 #define rep(i,a,b) for(int i=a;i<=b;i++) 7 using namespace std; 8 9 const int MAXN=555; 10 const int INF =1e9; 11 const double eps=1e-10; 12 13 int ... 阅读全文
posted @ 2013-09-01 12:31 Thousand Sunny 阅读(284) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 9 下一页