2011年8月29日
摘要: 主要代码及思想来自http://zhyu.me/acm/zoj-3526.html略有改动这题卡了很久,然后想到网络流,键一个超级源点,连所有人,流量为2,然后每个人连能与其邻座的人,流量为1在把每个人连超级汇点,流量为2,如果最大流等于人数两倍,就表示有解。源点连每个人2流量,表示一个人两边都要坐人。人数为1或2的时候特判一下,可惜,超时。不过,像下文一样缩点,应该可以吧。。。/* 题意:n个人参加party,每个人的兴趣都是ACG (Anime, Comic and Game) 中的一种或几种,现在要让所有人坐成一圈,并且要让相邻的人至少有一种 共同兴趣,现在给出每个人的... 阅读全文
posted @ 2011-08-29 17:41 FreeAquar 阅读(327) 评论(3) 推荐(0) 编辑
  2011年8月26日
摘要: 题意:就是用几个小正方形,去拼成个大的正方形。思路:从大到小,从左到右,深搜,不是很难,网上的代码很简洁,我就不用自己的了,加点注释吧#include <stdio.h>#include <memory.h>int cnt[20]; //记录长度为i的正方形个数int len[50]; //记录目前第i列覆盖长度int cake_side, npiece;bool chk(int used){ if(used == npiece) //所有正方形都用上了,返回真,跳出 return true; int min = 100, ind = -1; for(int i... 阅读全文
posted @ 2011-08-26 23:42 FreeAquar 阅读(227) 评论(0) 推荐(0) 编辑
  2011年8月20日
摘要: 题意:就是一个保守的老师,怕同学们谈恋爱,于是他觉得这样分组是没有问题的1.身高差距在40厘米以上2.同性别3.同样的音乐爱好4.不同体育爱好一下注释掉一段话,牢骚,之后正题/*话说这题真是命途多舛啊,中午没睡,困死,一看到找朋友,下意识并查集划分集合,写完后怎么也过不了样例好吧,再读一遍题,瞬间知道是二分匹配- -|||最后条件又忘写等号了贡献一次WA*/思路:题意是求最大独立集,即最大一个集合,其中任意两点之间都不存在边。求法是:最大独立集=顶点数-最大匹配数。因为我是直接用n个人对n个人匹配的(看了下网上好多用男匹配女的),所以求出的最大匹配数要除2.这样貌似会比男配女慢一些/**/#i 阅读全文
posted @ 2011-08-20 18:10 FreeAquar 阅读(202) 评论(0) 推荐(0) 编辑
  2011年8月18日
摘要: 题意:有N个点,之间有P条路(双向),要求每次从1到N走不同的路T次,求这T次中两点间路最长的一条思路:二分+最大流,如果两点之间有路,就建立流量为1的网络,然后二分路径长度,从新建立符合要求的图,求最大流注意重边的情况,如果是邻接表没事,否则注意,边不是取最小,要都存下,因为有可能都符合要求,WA了很多次都是错在这了三个小时就这么没了……今天一早,看出了原因了,于是用vector解决了,明显很慢啊,不知道是不是模板的原因……核心code:vector<int> map[nMax][nMax]; //原始图void rebuild(int mid){ memset(G, 0, si 阅读全文
posted @ 2011-08-18 11:04 FreeAquar 阅读(239) 评论(0) 推荐(0) 编辑
  2011年8月16日
摘要: 题意:就是有N个,M条道路,W条时间隧道,问是否能从某一点出经过一些道路和时间隧道后再次到达该顶点并且回到该点过去思路:最短路,只要有负权回路即可判断能回到过去注意,道路是双向的所以有2500*2条,再加上单向的W200条,贡献一次RE/* spfa() 2011-8-16*/#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <climits>#include <algorithm>#include <fun 阅读全文
posted @ 2011-08-16 11:20 FreeAquar 阅读(190) 评论(0) 推荐(0) 编辑
  2011年8月15日
摘要: 学习最小割的时候,要用到prim的最大生成树思想,于是找了到最大生成树的题目,做的试试分别用了kruskal和prim试了下kruskal很好想,排序的时候反过来就可以了,即,边的权值从最大向最小排列即可,最后判断下是否连通了而关于kruskal,我想了一下,按照原先的贪心思想,用两个集合A,B表示,A是已经连入的点,B是未连入的点这样,可以假设A与B分别是全连通(因为最总会变成一个最小生成树),这样,就只用每次找链接A与B间的最大权值,因为此时A,B已经是全连通了,就差一条边,只用取最大。每次对A缩点,对每条边进行这样的贪心就可以得到最大生成树了PS:注意prim的重边处理(我记得处理重边, 阅读全文
posted @ 2011-08-15 10:52 FreeAquar 阅读(335) 评论(0) 推荐(0) 编辑
  2011年7月22日
摘要: 题意:类似于1422,也是最小路径覆盖,但是一定要仔细看题思路:顶点数-最大匹配要用floyd,因为A->B,和B->C,可以得到A->C,但是一旦匹配了A->B,A就与C不连通了囧,看discuss才明白的……/* 因为每个点可以属于多条路,如果只属于 其中一条路的话,匹配后,另外连接这点 的路可能就断了 2011-7-22*/#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <climits>#in 阅读全文
posted @ 2011-07-22 23:59 FreeAquar 阅读(231) 评论(0) 推荐(0) 编辑
  2011年7月21日
摘要: 转自http://www.cnblogs.com/ylfdrib/archive/2010/07/20/1781148.html差分约束系统(system of difference constraints)是线性规划问题的一种。在一个差分约束系统中,线性规划矩阵A的每一行包含一个1和一个-1,A的所有其他元素都为0。因此,由Ax≤b给出的约束条件是m个差分约束集合,其中包含n个未知元。每个约束条件为如下形式的简单线性不等式: xj-xi≤bk 其中,1≤i, j≤n,1≤k≤m。 例如:寻找一个5维向量x = ( xi )以满足: 这一问题等价于找出未知量x1,x2,x3,x4,x5,满足以 阅读全文
posted @ 2011-07-21 10:10 FreeAquar 阅读(118) 评论(0) 推荐(0) 编辑
  2011年7月16日
摘要: 很明显,是个水题,可惜我更水,错了好多次,刚好今天练习了第二短路的条数,所以,求第二高频率还是很得意很快的写出来了,然后就不停的WA……中间我想省略掉一次哈希的遍历,于是每次hash[an]++后就直接和Max,sec比较记录,但是这样的话,sec永远与Max只是差1,因为最高的频率是一个一个加上来的所以每次替换,Max只是加1,所以是错的……/* 题意:找出所有数中出现频率第二高的,如果有很多第二高的,那么按升序输出 思路:快排+哈希 2011-7-16*/#include <iostream>#include <cstdio>#include <cstring 阅读全文
posted @ 2011-07-16 22:09 FreeAquar 阅读(298) 评论(0) 推荐(0) 编辑
  2011年7月14日
摘要: 考察的是位运算,要求输入的N,找一个最小的大于N的数,并且其转换成2进制后1的个数不变思路:记录从右往左最第一组连续1的长度,然后将右边连续的0取反加1再将原先记录的1的长度减少1,加回原来的数/* eg. n=10011100 m=100111 m=100 t=3; m=11 n=10011111+1=10100000 n=n+m=10100011*/#include <iostream>#include <cstdio>#include <cstring>#include <string>#inclu... 阅读全文
posted @ 2011-07-14 16:33 FreeAquar 阅读(286) 评论(0) 推荐(0) 编辑