2012年3月31日

poj 2135 Farm Tour

摘要: // 题意:有n个顶点和若干条无向边,边权值表示耗时多少,// 要从顶点1走到n,再回到1,不能走重复路,求最短耗时// 思路:对于题目给定的那些边,注意是无向边,每条边的容量为1,费用为每条边花费的时间。// 加一个超级源点st和汇点ed,源点st与顶点 1 连一条容量为2,费用为0的边,// 汇点ed与顶点 n 也连一条容量为2,费用为0的边. 接下来就是最小费用最大流问题了// 因为是无向边,所以加入一条边(u,v)同时也得加入反向边(v,u), 故必须得用邻接表#include <iostream> // 最小费用最大流,基于邻接表#inc... 阅读全文

posted @ 2012-03-31 15:08 sysu_mjc 阅读(341) 评论(0) 推荐(0) 编辑

poj 2195 Going Home

摘要: /*题意:一个n×m的矩阵,m表示人,H表示房子,.表示空地,人数和房子数相等,如下图:5 5HH..m...............mm..H现在要让所有的人都进入不同的房子内,人只能横着或竖着走一格,问总共最少走多少步?*/#include <iostream> // 最小费用最大流,基于邻接矩阵#include <cstdio>#include <cstring>#include <queue>using namespace std;const int INF = 1<<30;const int MAXN = 210; 阅读全文

posted @ 2012-03-31 10:03 sysu_mjc 阅读(335) 评论(0) 推荐(0) 编辑

2012年3月30日

poj 1751 Highways

摘要: // 题意: n个点,给出一些边(x,y),表示已经连接起来,新建一些边,使得任意两点间连通// 问新建哪些边使得施工量最小// 思路: 就是最小生成树问题,把已经连接在一起的顶点的距离设为0#include<iostream> //最小生成树prim算法using namespace std;#define inf 0x7fffffffconst int MAXN=760; //最大顶点数int n,edge[MAXN][MAXN]; //n记录顶点数int pos[MAXN][2];struct MST //最小生成树的边{ int s... 阅读全文

posted @ 2012-03-30 20:06 sysu_mjc 阅读(312) 评论(0) 推荐(0) 编辑

2012年3月29日

poj 2230 Watchcow

摘要: // 题意: n个顶点,m条无向边,图连通,从顶点1出发,要将每条边恰好遍历两遍,而且要以不同的方向,// 最后还要回到顶点1,求出这样的路线, 题目保证有解.// 思路: 欧拉回路问题,可以将无向边转换为有向边,// 即将每条边拆成两条反向边,使其双向连通,g[a][b]=g[b][a]=1,// 然后根据建立的有向图求解该图的欧拉回路.// 注意用邻接表建图,邻接矩阵会 MLE#include<iostream> // 欧拉回路,无向图转有向图#include<string>#include<algorithm>using namespace std;# 阅读全文

posted @ 2012-03-29 20:56 sysu_mjc 阅读(327) 评论(0) 推荐(0) 编辑

poj 1386 Play on Words

摘要: /* 题意: 有一些单词,排列这些单词,要求前一个单词的最后一个字母与后一个单词的第一个字母相同。 问能否对所有单词进行排列 思路: 把单词的第一个字母和最后一个字母作为点,由第一个字母向最后一个字母连一条有向边, 问题转化为判断一个有向图是否存在欧拉道路 有向图存在欧拉道路的条件: 在忽略边的方向后,图必须是连通的,同时最多只能有两个点的入度不等于出度, 而且必须是其中一个点的出度刚好比入度大1(把它作为起点),另一个的入度比出度大1(把它作为终点).*/#include <iostream> //有向图的欧拉道路using namespace std;int in[26],o. 阅读全文

posted @ 2012-03-29 16:25 sysu_mjc 阅读(399) 评论(0) 推荐(0) 编辑

poj 1816 Wild Words

摘要: // 题意: 给出N(<=100000)个带通配符(?和*)的模式串, M(<=100)个字符串,// '*'可代替0个或多个字母,'?'可代替一个字母,问每个字符串能匹配到哪些模式串,按顺序给出 // 模式串长度不超过6, 要匹配的字符串长度不超过20.// 思路: 用trie树动态构建模式串,然后再dfs来匹配,// 要注意若静态建树会 MLE ,因为每个节点都含有vector<int>#include <iostream> // trie树, 含通配符的多字符串匹配#include <string>#incl 阅读全文

posted @ 2012-03-29 15:15 sysu_mjc 阅读(407) 评论(0) 推荐(0) 编辑

2012年3月28日

poj 2418 Hardwood Species

摘要: // 题意:给出不同的树,求每种树所占的比例,并要求树名按字典序由小到大输出#include <iostream> //map#include <string>#include <map>using namespace std;int main(){ map<string,int> col; char str[100]; double tot=0; while(gets(str)) { col[str]++; tot++; } for(map<string,int>::iterator ite=col.begi... 阅读全文

posted @ 2012-03-28 17:30 sysu_mjc 阅读(323) 评论(0) 推荐(0) 编辑

poj 2513 Colored Sticks

摘要: /* 题意: 有一些木棍,每根木棍两端都有颜色,颜色为小于10的字符串, 问能否将所有的木棍排成一排,使得每两根木棍衔接的地方颜色相同 思路: 将所有的颜色看做节点,每根木棍连接两种颜色,可以看作两颜色节点之间的连边,构成一幅图, 问题转化成每条边都走一次,即遍历所有木棍,也就是判断 无 向 图 中是否存在 欧 拉 道 路 对于欧拉图的判断,有两个,首先判断连通性,在图连通的前提下再判断各节点的度数, 有两个奇节点或者全为偶节点才存在 欧 拉 道 路 可以用并查集判断连通性,而因为节点是字符串,所以还需要对字符串哈希,也可以用trie树来给字符串赋编号*/#include <iostre 阅读全文

posted @ 2012-03-28 16:36 sysu_mjc 阅读(366) 评论(0) 推荐(0) 编辑

2012年3月27日

sicily 1209. Sequence Sum Possibi

摘要: // 给出m,求由至少两个元素组成的等差数列的和恰好等于m,有多少种组合可能性// 比如 6 = 1 + 2 + 3 , 9 = 4 + 5 = 2 + 3 + 4 , 则答案是 1 2// 参照 sicily 1218 纪念邮票#include<iostream> #include<stdio.h>using namespace std;int main(){ int cases; cin>>cases; while(cases--) { int n,m,res=0; cin>>n>>m; ... 阅读全文

posted @ 2012-03-27 13:08 sysu_mjc 阅读(458) 评论(0) 推荐(0) 编辑

sicily 1218. 纪念邮票

摘要: // 题意: 给出n,m,求出 等差数列: a+(a+1)+...+(b-1)+b=m 有多少种(a,b)组合可能性, 其中a<=b<=n #include<iostream>#include <stdio.h>#include<map>using namespace std;int main(){ int n,m; map<int ,int> col; cin>>n>>m; int a,c; //设a,b间距离为c,即 c=b-a,所以 a+..+b=(a+b)(b-a+1)/2=(2a+c)(c+1)/2= 阅读全文

posted @ 2012-03-27 13:02 sysu_mjc 阅读(264) 评论(0) 推荐(0) 编辑

导航