上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: 题意:n×m的棋盘,上面有羊和狼,可以在格子四条边上修护栏,问最少修多少护栏可以使狼吃不到羊?分析:超级源点连狼,超级汇点连羊,容量无穷大,求最小割。#define M 40010struct Node{ int c,v,next;}E[999999];int head[M];int gap[M],dis[M],pre[M],cur[M],d[M];int NE,NV;int sap(int s,int t) { memset(dis,0,sizeof(int)*(NV+1)); memset(gap,0,sizeof(int)*(NV+1)); FOR(i,0,NV)... 阅读全文
posted @ 2013-06-21 13:22 心向往之 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 题意:总结点数 nodenum 电站数power 用户数consumer 电缆线数linklink个电缆: (起点,终点) 最大传电量power个电站: (电站) 发电量consume个用户:(用户) 用电量分析:建超级源汇点,模板。。。int NUM,FLAG;#define DIG(a) (((a)>='0')&&((a)<='9'))#define cini(j) { \ j=FLAG=0; NUM=getchar(); \ while(!DIG(NUM)&&NUM!='-')NUM=getcha 阅读全文
posted @ 2013-06-21 13:07 心向往之 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题意:求至少添加几条边,使原图中没有桥。分析:找出边连通分量,缩点,形成一棵树,树叶有cnt个,则结果为(cnt+1)/2#define M 1011struct Node{ int v,next;}edge[M<<4];int len;int old[M],n;int nb;int tim[M],t;int sta[M],top;int low[M],hash[M];//原结点向新结点映射int rudu[M];int bs[M],be[M],bb;//桥void add(int &kind,int v){ edge[len].next=kind; edge[len].v 阅读全文
posted @ 2013-06-21 12:52 心向往之 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 题意:问每个割点分别和几个连通分量相连分析:每确定一次u是割点,rudu[u]+1,若u不是根又是割点,rudu[u]再+1#define M 1011struct Node{ int v,next;}edge[M<<4];int len;int old[M],n;int nb;int tim[M],t;int sta[M],top;int low[M],hash[M];//原结点向新结点映射int rudu[M];int bs[M],be[M],bb;//桥int Case;void add(int &kind,int v){ edge[len].next=kind; e 阅读全文
posted @ 2013-06-21 12:48 心向往之 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个间谍,其中r个花钱可以买通,间谍手上有其他间谍的证据。问能否控制所有间谍。能的话输出最小的钱数,不能的话输出最小的不能被控制的间谍ID。分析:缩点后的价值取环内最小的价值,然后把入度为0的间谍全部买下来。#define M 3011struct Node{ int v,next;//next要初始化为-1}edge[15001];int n , nn , len;int old[M],now[M];int tim[M],t;int low[M],hash[M],hp[M];//原结点向新结点映射 新边判重int sta[M],top;int cost[M];int sum,... 阅读全文
posted @ 2013-06-21 12:46 心向往之 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 题意:推箱子 要求在推的次数最少的情况下,人移动次数最少分析:pu[x1][y1][x2][y2]、mo[x1][y1][x2][y2]记录人在x1,y1 箱子在x2,y2时的最少推动次数和最少人移动次数。const int maxn=1000000;int n,m,pp,p,ans,bestp,bestm;char c[25][25];struct node{ int x1,y1,x2,y2,pus,mov; int pre; char op;}nd[maxn];int mo[20][20][20][20],pu[20][20][20][20];int tx[]={-1,... 阅读全文
posted @ 2013-06-20 20:03 心向往之 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个固定大小为10x15的矩形区域A内被RGB三种颜色的小球填满。现在按如下步骤操作:1、 删除区域A内最大的一片区域M(任意颜色都可以,只要其占有区域最大)2、 删除M后,自然会出现空的位置,在M区域上方的小球自然下落;当删除M后出现空列时,右边的列往左填充。注意是以“列”为单位填充,非空列只能整列往空列移动。移动后,各个小球之间的相对顺序 与 移动前一样。3、 当区域A剩余小球数为0,或A内的最大区域为1时,游戏结束。char b[10][16],c[10][16];int best_i,best_j,best_cnt;int now_i, now_j, now_cnt;int s 阅读全文
posted @ 2013-06-20 19:59 心向往之 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题意:有一块边长为N的正方形的大蛋糕,现在给出n块不同尺寸的正方形的小蛋糕的边长,问是否能把大蛋糕按恰好切割为这n块小蛋糕,要求每块小蛋糕必须为整块。分析:用a[i]==j表示第i 行已填的长度为j,排序后相同的小蛋糕不重复考虑。由于小蛋糕边长范围为1~10,所以可以用b[1~10]分别表示边长为1~10的小蛋糕个数int a[50],N;//大方快每行已填长度int b[18],n; //小方块边长int c[18]; //小方块是否用过int s; //当前已用的小方块数int ans=0;void zuishao(int &p1,int &p2,int &lent 阅读全文
posted @ 2013-06-20 19:49 心向往之 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 题意:某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwidths 和 价格prices。现在每种设备都各需要1个,考虑到性价比问题,要求所挑选出来的n件设备,要使得B/P最大。其中B为这n件设备的带宽的最小值,P为这n件设备的总价。分析:方法一 按带宽升序排序,从小到大枚举dev[]中各个设备的带宽,枚举B值的过程中,若发现B值比某种设备的最大带宽更大,则无需继续枚举。方法二(最优) 输入时确定最小带宽min和最大带宽max,从min到max枚举带宽i作为最小带宽, 阅读全文
posted @ 2013-06-20 19:44 心向往之 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题意:长度相同的原始木棍被砍断,现在想将小木棍拼接成原始木棍,求原始木棍的最小可能长度。分析:经典剪枝1.越长的木棍对后面木棍的约束力越大,因此要把小木棍排序,按木棍长度从大到小搜索,这样就能在尽可能靠近根的地方剪枝。2.当前木棍能恰好填满一根原始木棍,但剩余的木棍无法组合出合法解,如果用更短的木棍组合来代替这根木棍,当前木棍不可能和剩下的其它木棍组合出合法解。3.考虑每根原始木棍的第一根木棍,如果无法得出合法解,就不必考虑下一根木棍了,因为当前木棍一定是作为某根原始木棍的第一根木棍。4.跳过重复长度的木棍。5.最后一根木棍不必搜索,因为原始木棍长度是总木棍长度的约数。int a[1000], 阅读全文
posted @ 2013-06-20 19:41 心向往之 阅读(199) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 9 下一页