随笔分类 -  ACM题解

上一页 1 2 3 4 5 6 7 8 ··· 11 下一页
摘要:比较简单的网络流。需要注意的地方:1、数据中有重边;2、输入均为单向边。View Code #include <stdio.h>#include <string.h>#include <queue>using namespace std;#define MIN(a,b) ((a)<(b)?(a):(b))#define N 201#define INF 0x3ffffffint n,m;int g[N][N];int pre[N];void EK(int s,int t){ int maxflow=0; int u,v; while(true) { q 阅读全文
posted @ 2012-07-27 17:34 BeatLJ 阅读(230) 评论(0) 推荐(0)
摘要:Description现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) 3:(x,y)<==>(x+1,y+1) 道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,开始时所有的兔子都聚集在左上角(1,1)的窝里,现在 阅读全文
posted @ 2012-07-27 17:32 BeatLJ 阅读(263) 评论(0) 推荐(0)
摘要:题目大意:给定一个无向连通图,求至少需添加几条边,使得原图双连通(不存在桥)。分析:用tarjan算法找桥,将所有不是桥的边的端点用并查集合并,这题以前写过,至于为什么可以用并查集来合并,可以参考以前那篇博客。需要注意的是,数据中有重边,在判桥时要注意。可以用一个矩阵存储边的数目,若某边数目大于1,则一定不是桥。View Code #include <stdio.h>#include <string.h>#define MIN(a,b) ((a)<(b)?(a):(b))#define N 1001#define M 2002int n,m,e;int g[N][ 阅读全文
posted @ 2012-07-26 22:48 BeatLJ 阅读(202) 评论(0) 推荐(0)
摘要:题意:求一个有向图中所有满足以下性质的结点:从自身出发可达的点均能回到自身。分析:求的就是缩点后出度为0的强连通分量内的点。这题以前写过,当时用邻接表来存储的。今天又试了下矩阵存储,速度慢了一半……用矩阵存储时,要用char或bool,否则会超内存。View Code #include <stdio.h>#include <string.h>#define N 5001int n,m;char g[N][N],vis[N];int dfn[N],id[N],cnt;int dout[N];void dfs(int u){ vis[u]=1; for(int v=1;v& 阅读全文
posted @ 2012-07-26 21:10 BeatLJ 阅读(199) 评论(0) 推荐(0)
摘要:题目大意:有n个牛,已知这些牛之间的崇拜关系,崇拜关系是可以传递的,例如:a崇拜b,b崇拜c,那么a崇拜c。问有多少牛被其他所有牛崇拜?分析:根据崇拜关系建立有向图,已知同属于一个强连通分量的牛互相崇拜,通过求强连通缩点后,若出度为0的点只有一个,那么这一群牛就被其他所有牛崇拜,否则不存在被其他所有牛崇拜的牛。View Code #include <stdio.h>#include <string.h>#define N 10001#define M 50001int first[N],next[M],v[M];int rfirst[N],rnext[M],rv[M]; 阅读全文
posted @ 2012-07-26 20:17 BeatLJ 阅读(208) 评论(0) 推荐(0)
摘要:题目大意:有n个学生和p门课程,每个学生选修了p门课程中的一些,问能否找到p个课代表,一个人最多只能当一门课的课代表。分析:建立二分图,求最大匹配,判断最大匹配数目是否为pView Code #include <stdio.h>#include <string.h>#define N 301int g[N][N];int x[N],y[N],vis[N];int p,n;int path(int u){ int v; for(v=1;v<=p;v++) if(!vis[v]&&g[u][v]) { vis[v]=1; if(y[v]==-1 |.. 阅读全文
posted @ 2012-07-26 17:25 BeatLJ 阅读(156) 评论(0) 推荐(0)
摘要:DescriptionN个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。问题2:至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。Input输入有多组样例,大约1000组。每组样例第一行包含两个整数N,M(2<=N<=100),N代表学校的个数,M代表边的个数(M<N*N)接下来M行,每行包含连个整数u,v,代表u可以向v单向发送数据。Output每组样例对应两行,分别是问题一和问题二的解。Sample 阅读全文
posted @ 2012-07-26 17:19 BeatLJ 阅读(193) 评论(0) 推荐(0)
摘要:题意:给定一棵二叉树的先序遍历结点序列和中序遍历结点序列,求其后序遍历结点序列。树的结点不超过26。分析:由于遍历都是递归定义的,所以不难得到以下结论:树的任意子树的遍历结点序列一定是该树的遍历结点序列的一个连续子序列。有了这个结论后,我们的任务就是确定子树遍历结点序列的起点和终点,而这个可以根据preorder和inorder得到。例如,preorder的第一个结点是根,设为root,root这个结点会把inorder分为2部分(可能某部分为空),左边的就是左子树的中序遍历结点序列,右边的就是右子树的中序遍历结点序列,这样也就确定了左子树和右子树的结点数目,根据左右子树结点数目,就可得到左右 阅读全文
posted @ 2012-07-25 21:48 BeatLJ 阅读(850) 评论(0) 推荐(0)
摘要:题目大意:现有n个点,每个结点有一个权值v,给出关于这些点的m条信息,每条信息(i j k)指出v[i]-v[j]>=k,最后求的是在满足以上约束条件的情况下,v[1]-v[n]的最大值是多少?(N and M not exceeding 30 000 and 150 000 respectively)分析:可以根据题意直接建立差分约束系统,然后以1为源点用spfa求最短路。问题:用队列TLE了,看了discuss后改为stack就A了View Code #include <stdio.h>#include <string.h>#include <stack 阅读全文
posted @ 2012-07-25 20:57 BeatLJ 阅读(236) 评论(0) 推荐(0)
摘要:题目大意:给一个字符文本,每行一个字符串,统计不同的字符串出现的百分比。最后按ASCII排序输出不同字符串和出现的百分比。分析:对输入字符串建立字典树,在叶子结点记录该字符串出现的次数。这样的话,最后就可以查找每个字符串出现的次数。另外用一个数组记录不同的字符串,然后对其排序,输出结果。建字典树时要注意,题中没说出现的字符的范围,那就是所有字符都可能出现。数组应开成next[NODE][130].不知道为什么,用C++提交就AC,用G++提交就WA……,确实不太明白这二者有什么区别。View Code #include <stdio.h>#include <stdlib.h& 阅读全文
posted @ 2012-07-25 20:45 BeatLJ 阅读(837) 评论(0) 推荐(0)
摘要:题目大意:已知关于在一条直线上的n个点的m条信息,信息分为两类,1、准确信息:P A B X 表示A在B的北方X光年;2、模糊信息:V A B 表示A在B的北方1光年以北。问所给信息是否自相矛盾?比较裸的差分约束系统。将等式转为2个不等式即可建立差分约束系统,另需添加一个源点。使用memset时尽量计算需要清空的大小,否则容易被多组小数据卡到TLE。View Code #include <stdio.h>#include <string.h>#include <queue>using namespace std;#define N 1010#define M 阅读全文
posted @ 2012-07-24 23:27 BeatLJ 阅读(234) 评论(0) 推荐(0)
摘要:题目描述有点复杂,前面讲了一大堆废话。题目大意:对一个含n个整数的序列进行一些约束:1、整数序列中连续的一段的和大于某个整数;2、整数序列中连续的一段的和小于某个整数。问满足以上约束的整数序列是否存在。分析:首先利用前缀和进行转换,然后将>化为>=,将<化为<=,然后就基本是裸的差分约束系统了。需要注意的是,建立的约束图可能并不是无向连通的,所以需要另外加一个结点作为源点,由于加了一个点,所以判断是否有负环时要注意,条件是某个点进队次数大于n+1View Code #include <stdio.h>#include <string.h>#inc 阅读全文
posted @ 2012-07-24 17:34 BeatLJ 阅读(213) 评论(0) 推荐(0)
摘要:此题是 POJ 1716的加强版。题意:给定n个整数区间,求一整数集合,使得任意区间中至少有ci个数在集合中,求集合中最少包含的元素个数。建立差分约束系统:d[bi+1]-d[ai]>=ci ,0<=d[i+1]-d[i]<=1,d[k]为在区间[0,k-1]中选取的元素个数。View Code #include <stdio.h>#include <string.h>#include <queue>using namespace std;#define N 50010#define M 200010#define MIN(a,b) ((a 阅读全文
posted @ 2012-07-24 17:24 BeatLJ 阅读(218) 评论(0) 推荐(0)
摘要:DescriptionAn integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b. Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval.InputThe first line of the input contains the num 阅读全文
posted @ 2012-07-24 17:18 BeatLJ 阅读(187) 评论(0) 推荐(0)
摘要:Description靠各种货币之间的的汇率差不断买入,使自己的财富大于现有财 富的行为叫做套汇。当然,能不能成功,那可不一定。现在,某城市有M家银行,该城市一共流通N种货币,所以这M家银行一共提供N种货币的兑换业务。但是每 家银行只提供两种货币间的兑换业务,且这M家银行之间,没有任何两家银行会提供相同的货币种类间的兑换业务。每次到各个银行兑换的时候,都需要一定的手续 费。比方说,我现在有100美金,我打算将他换成人民币,而他们之间的比例是1:6,手续费按用来兑换的币种收取,比方说是0.5美金,那么,最后我得到的人民币有(100-0.5)*6=597元。现在,某人拥有币种为S的钱,他想套汇,当 阅读全文
posted @ 2012-07-24 17:09 BeatLJ 阅读(186) 评论(0) 推荐(0)
摘要:Description 上次去超市扫荡回来的东西用完了,Staginner又得跑超市一趟,出发前他列了一张购物清单,打算去买K种不同的商品,每种买一件。到了超市,Staginner发现每种商品有N个品牌,每个品牌此商品的价格为Vi,对Staginner的作用值为Wi,他会从这N个品牌里面挑一个品牌买。这时,Staginner突然想起出门时只带了M元钱,又懒得去取钱了,所以不一定能买完K种商品,只好尽可能地让买的东西对自己的总作用值ans最大。Input多组样例。 第一行两个整数K,M代表Staginner想买的不同种类商品的数目和他带的钱 (0 < K <= 30, 0 < 阅读全文
posted @ 2012-07-23 23:41 BeatLJ 阅读(338) 评论(0) 推荐(0)
摘要:Calf FlacIt is said that if you give an infinite number of cows an infinite number of heavy-duty laptops (with very large keys), that they will ultimately produce all the world's great palindromes. Your job will be to detect these bovine beauties.Ignore punctuation, whitespace, numbers, and case 阅读全文
posted @ 2012-07-23 21:55 BeatLJ 阅读(238) 评论(0) 推荐(0)
摘要:DescriptionFarmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course.Farmer John ordered a high speed connection for his farm and is going to share his connectivity with the other farmers. T 阅读全文
posted @ 2012-07-23 17:18 BeatLJ 阅读(358) 评论(0) 推荐(0)
摘要:题意:求n个非负数中任意2个的异或值的最大值。n数量级为10^5分析:直接暴力肯定超时了。一个非负整数可以看成1个32位的01字符串,n个数可以看成n个字符串,因此可以建立字典树,建好树后,对于任意非负整数x,可以沿着树根往下贪心找到y,使得x异或y最大,复杂度为树的深度。View Code #include <stdio.h>#include <string.h>#define MAX(a,b) ((a)>(b)?(a):(b))#define NODE 3200010#define N 100010int n;int v[N];int node;int nex 阅读全文
posted @ 2012-07-22 23:39 BeatLJ 阅读(3455) 评论(0) 推荐(0)
摘要:题目大意:找出1到300的数中其平方在b进制下是回文的数,并打印这些数数及其平方在b进制下的表示。View Code /*ID: lijian42LANG: C++TASK: palsquare*/#include <stdio.h>#define LEN 20#define N 300char t[20]={'0','1','2','3','4','5','6','7','8','9','A','B 阅读全文
posted @ 2012-07-22 21:22 BeatLJ 阅读(186) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 ··· 11 下一页