上一页 1 ··· 7 8 9 10 11 12 下一页
摘要: http://poj.org/problem?id=1325两台机器A,B,A有n个模式,B有m个模式,现在有k个工作,其中每一个工作可以由A或B中的一个特定模式来完成,但是切换机器的模式要重新启动一次,问最少要重启多少次机器才能完成所有工作?A,B两台机器构成一个二分图,在之间按照给出的条件连边。这样想,每一个工作其实是由一条边来代表的,那么我们只要用最少的顶点来覆盖所有的边即可。这就是最小覆盖。根据公式:最小覆盖=最大匹配;对原二分图做一次最大匹配即可。对了,针对这个题还有一个问题,就是起始状态下是在mode 0的,如果在这个模式下工作,是不需要切换mode的,所以只要有工作是在mode 阅读全文
posted @ 2011-02-10 23:06 CoderZhuang 阅读(188) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2771老师带学生出去旅游,但是担心学生会发生恋爱关系,所以带出去的学生至少要满足以下要求之中的一个:1.身高相差40cm以上2.同性3.喜欢的音乐风格不同4.喜欢的运动相同问最多可以带出去多少学生?个人感觉如果有男有女,就很有可能是二分匹配了。这道题我们反过来想,如果将所有可能发生恋爱关系的男女配对,那么可以带出去的人数应该等于这个二分图的最大独立集。根据公式: 最大独立集=顶点数(包括X和Y)-最大匹配求一次匹配即可。Source CodeProblem: 2771User: 541780774Memory: 1088KTime: 579 阅读全文
posted @ 2011-02-10 21:28 CoderZhuang 阅读(196) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3216题目说的是一个城市里面有Q个点,有M项工作,每个工作有个工作地点pi,最晚开始时间ti,和工作需要的时间di.从城市中的任意一个点到另一个点的直接时间又一个矩阵给出。不连通为-1.注意间接联通是被允许的。我再这个题上哉了2次,汗啊。我总是以为二分图的顶点时基于城市中的点的,但实际上时基于工作。这一题首先对给定的图做一次floyd,这样就能求出两个点之间最少需要走的时间。然后判断两个工作之间是否存在先后关系最后做最小路径覆盖即可。注意这里的顶点数应该是工作数!这一题值得重点注意!!!Source CodeProblem: 3216Use 阅读全文
posted @ 2011-02-10 18:07 CoderZhuang 阅读(214) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1125题意:有n个股票经纪人,要求从中选择一个作为散发谣言的开端,使得最后一个人收到谣言时时间时最短,当然谣言只能在有关联的两人这间传播。要注意从A到B和从B到A的时间并不等价!!解题:典型的最短路问题,套用Floyd算法即可。Source CodeProblem: 1125User: 541780774Memory: 408KTime: 0MSLanguage: G++Result: AcceptedSource Code#include<stdio.h> #include<stdlib.h> #include&l 阅读全文
posted @ 2011-02-10 17:57 CoderZhuang 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 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 阅读(152) 评论(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 阅读(164) 评论(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 阅读(132) 评论(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 阅读(159) 评论(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 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 水题!可惜没看清当A中有多个相同结果时,要取最小值,被WA了一次。#include <iostream>using namespace std;int AC(int a,int b){ int n=0; while(a!=0||b!=0) { if(a%2!=b%2) n++; a/=2; b/=2; } return n;}int main(){ int x,y,i,j,A[101],B[101],n,e,f,top; cin>>n; while(n--) { cin>>x>>y; for(i=0;i<x;i++) cin>> 阅读全文
posted @ 2010-11-13 23:38 CoderZhuang 阅读(99) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 下一页