09 2013 档案

POJ - 1523 SPF
摘要:题目要求割顶集,并且还要求出去掉割顶之后剩下的图连通数目。tarjan算法求出割顶后直接枚举就可以了吧。一开始想到利用iscut[u]的次数也就是点u被判定为割顶的次数求连通分量数,还有利用与结点u相连的点的bccno不同的编号来判定,都是不行的,具体原因自己想清楚比较好。以后就不会犯这样的错误了。代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #define esp 1e-6#define pi aco 阅读全文

posted @ 2013-09-30 17:37 rootial 阅读(159) 评论(0) 推荐(0)

HDU - 3594 Cactus
摘要:这是一个有向仙人掌的题目,要求判定给定的图是不是强连通图,而且每一条边只能出现在一个环中,这里有一个介绍有向仙人掌的文档:http://files.cnblogs.com/ambition/cactus_solution.pdf。有向仙人掌的判定:1.dfs树中不存在横叉边;2.dfs树中不存在lowlink[v]>pre[u],也就是不存在桥,lowlink[v]表示从v及其子节点出发能回到的pre值最小的祖先的pre值;3.从节点u出发的点v,满足pre[v] . 2 #include 3 #include 4 #include 5 #include 6 #include... 阅读全文

posted @ 2013-09-27 21:23 rootial 阅读(326) 评论(0) 推荐(0)

UVA 10765 Doves and bombs
摘要:给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点。 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于不是割顶的点,去掉后剩下的仍为双连通,所以结果就是1. 代码: #include #include #include #include #include #include #inc... 阅读全文

posted @ 2013-09-26 13:28 rootial 阅读(265) 评论(0) 推荐(0)

UVA 11294 Wedding
摘要:给n对夫妇安排座位,其中0h,0w分别表示新郎,新娘。同一对新郎,新娘不能坐在同一侧,而且互为通奸关系的人不能同时坐在新娘对面。 这道题目真是掉尽节操啊,,,欧美的氛围还是比较开放的。 分析: 首先说一下应该注意的是新郎新娘也可能是会有通奸关系出现的,所以一开始必须将他们考虑进去。 为每对夫妇设立一个变量,xi,1表示妻子和新娘坐在同侧,否则表示丈夫和新郎坐在同侧。然后用mark[2*i]... 阅读全文

posted @ 2013-09-26 12:19 rootial 阅读(417) 评论(0) 推荐(0)

ZOJ - 2615 Cells
摘要:注意数组别开太小了,代码照着训练经典打的: #include #include #include #include #include #include #include #include #include #include #include #include #include #define esp 1e-6#define pi acos(-1.0)#define pb push_back... 阅读全文

posted @ 2013-09-25 22:42 rootial 阅读(301) 评论(0) 推荐(0)

UVALive - 3713 Astronauts
摘要:给定n个宇航员的年龄,平均年龄为 ave,根据下列要求分配任务: B任务只能分配给年龄=ave的宇航员; C任务可以任意分配。 给定m组互相憎恨的宇航员,要求他们不能分配到同一个任务。能否存在这样的一组任务分配。 每个宇航员都只能分配两种任务中的一种:A或C(年龄大于等于ave),B或C(年龄小于ave),那么为每个宇航员设立一个变量xi,xi为0表示分配C任务,为1则分配A或B(根据年龄... 阅读全文

posted @ 2013-09-25 17:12 rootial 阅读(224) 评论(0) 推荐(0)

UVALive 3211 Now or later
摘要:每架飞机有早晚起降两种方式,给定n架飞机两种方式的起落时间,为每架飞机安排起落时间(早或晚),使得所有飞机起降时间按照早到晚的顺序之间的间隔时间最小值尽量大。 分析: 最小时间尽量大应该采用二分的方法比较好,然后就变成了判别某个时间间隔m是不是符合要求的了。为没加飞机设立一个变量xi,0表示早,1表示晚,然后每架飞机i用两个点2*i,2*i+1表示,前者如果被标记表示早,后者被标记表示晚降。 ... 阅读全文

posted @ 2013-09-25 09:49 rootial 阅读(474) 评论(0) 推荐(0)

UVA - 11324 The Largest Clique
摘要:给定一个图,求一个节点数目最多的团,对于其中任意两个节点u,v至少存在一条这样的路径使得u到v,或者v到u。分析: 先求出强连通分量,然后缩点,构成一个scc图,然后求一条最长的路,每个节点的权重即为该强连通分量的节点数目,由于是DAG, 所以可以用dp或者spfa,一开始用记忆化搜索竟然TLE,想也想不通,后来改成spfa,以0为起点,然后求出距离0的最大距离。spfa: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #inc... 阅读全文

posted @ 2013-09-24 23:00 rootial 阅读(310) 评论(0) 推荐(0)

UVALive - 4287 Proving Equivalences
摘要:给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图成为一个强连通分量. 先求出所有的强连通分量,然后缩点构成一个SCC图,统计其中入度为0的点个数a,以及出度为0的点的个数b,max(a,b)就是需要再作的证明.注意当图一开始就是强连通时,不需要作... 阅读全文

posted @ 2013-09-24 11:10 rootial 阅读(216) 评论(0) 推荐(0)

UVALive - 5135 Mining Your Own Business
摘要:刘汝佳白书上面的一道题目:题意是给定一个联通分量,求出割顶以及双连通分量的个数,并且要求出安放安全井的种类数,也就是每个双连通分量中结点数(除开 割顶)个数相乘,对于有2个及以上割顶的双连通分量可以不用安放安全井。如果整个图就是一个双连通分量,那么需要安放两个安全井,种类数是n*(n-1)/2.代码来自刘汝佳白书: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include... 阅读全文

posted @ 2013-09-23 22:58 rootial 阅读(308) 评论(0) 推荐(0)

POJ - 1094 Sorting It All Out 拓扑排序
摘要:题意描述:给定前n个字母的关系描述,根据输入的m组描述(类似A#include #include #include #include #include #include #include #include #include #include #include #define esp 1e-6#define pb push_back#define mp(a, b) make_pair((a), (b))#define in freopen("in.txt", "r", stdin);#define out freopen("out.txt&quo 阅读全文

posted @ 2013-09-21 17:37 rootial 阅读(218) 评论(0) 推荐(0)

UVALive - 4255 Guess
摘要:给定一个字符矩阵,s[i][j]为+,-,0分别表示ai+……….aj的和为正,负,0。可以将连续和转化为前缀差,即s[i][j]为+可以表示为B[j]-B[i-1]为正,B[i]表示前i项的和,B[0]为0,然后拓扑排序找出相对关系再依次取值即可。注意相同的B[i],B[j]要注意保存,最后两者的值统一。最终输出结果a[i] = B[i]-B[i-1]l.代码:#include #include #include #include #include #include #include #include #include #include #include #include #define e 阅读全文

posted @ 2013-09-20 13:45 rootial 阅读(232) 评论(0) 推荐(0)

UVA - 10047 The Monocycle
摘要:从刘汝佳训练指南上看到的一道题,看了解释之后发现是一道最短路问题,(x,y,d,c)表示位于(x,y)点面向为d,颜色为c的状态,然后每个状态有左转,右转,前进3个转移方式也就对应三条边,然后建图求最短路就可以了。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define esp 1e-6 14 #define pb... 阅读全文

posted @ 2013-09-19 11:01 rootial 阅读(219) 评论(0) 推荐(0)

UVA 10651 Pebble Solitaire 状态压缩dp
摘要:一开始还在纠结怎么表示一个状态,毕竟是一个串。后来搜了一下题解发现了这里用一个整数的前12位表示转态就好了 ,1~o,0~'-',每个状态用一个数来表示,然后dp写起来就比较方便了。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define esp 1e-613 #define pb push_back14 #define in freopen("in.t 阅读全文

posted @ 2013-09-18 22:49 rootial 阅读(233) 评论(0) 推荐(0)

UVA 825 Walkiing on the safe side
摘要:根据地图,要求固定两点间最短路径的条数 。这题的输入数据就是个坑,题目有没有说明数据之间有多个空格,结尾换行符之前也不止一个空格,WA了好几遍,以后这种情况看来都要默认按照多空格的情况处理了。可以先利用bfs求出起点到各点的最短距离,然后dfs统计 num[x][y]表示起点到x,y的最短路径数,转移方程为 num[x][y] += num[nx][ny], nx = x +dx[k],ny = y + dy[k],map[nx][ny] != 0.代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #... 阅读全文

posted @ 2013-09-18 09:06 rootial 阅读(266) 评论(0) 推荐(0)

UVALive 3027 Corporative Network
摘要:给定两种操作1.E I 查询I到根节点的距离2.I I J 将I的父节点设为J,I,J的距离变为|I-J|%1000。在查找结点的时候顺便把结点到根节点的距离更新。代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define esp 1e-611 #define pb push_back12 #define in freopen("in.txt", "r", stdin);13 #defin 阅读全文

posted @ 2013-09-17 19:51 rootial 阅读(208) 评论(0) 推荐(0)

UVA 1160 X-Plosives
摘要:题意是一次装入物品,物品由两种元素组成,当遇到即将装入的物品与已经装入的物品形成k个物品,k种元素,跳过该物品的装入。可以将每种元素看成顶点,物品看成一条边。这样问题就转化为利用并查集求环的情况。算法竞赛训练指南中的代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define esp 1e-611 #define pb push_back12 #define in freopen("in.txt", " 阅读全文

posted @ 2013-09-17 19:48 rootial 阅读(255) 评论(0) 推荐(0)

UVA 437 The Tower of Babylon
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define esp 1e-611 #define pb push_back12 #define in freopen("in.txt", "r", stdin);13 #define out freopen("out.txt", "w", stdout);14 #define print(a) printf(& 阅读全文

posted @ 2013-09-14 20:04 rootial 阅读(240) 评论(0) 推荐(0)

UVA 658 It's not a Bug, it's a Feature!
摘要:这个题目巧妙之处在于用二进制的每个位1,0分别表示bug的有无,以及实施补丁对相应bug的要求以及实施后的对bug的影响。软件bug的状态:1表示相应bug仍然存在,0表示已经修复。这样可以将软件的状态用一个整数表示,例如1100(12)表示第1,2个bug存在,后面两个已经修复。那么,对于n个bug 的软件,起点src = (1 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define esp 1e-611 #define pb push_... 阅读全文

posted @ 2013-09-12 18:58 rootial 阅读(272) 评论(0) 推荐(0)

UVA 10273 Eat or Not to Eat?
摘要:这个题目一直以为是要用图论知识来做,可是一点建图的思绪都没有,后来知道暴力便可破之。由于牛的产奶周期最大为10,1.2.3.....10的最小公倍数是MT = 2520,所以把MT作为最大的周期,然后枚举这个周期内的每一天,看产奶量最小的牛是否唯一,然后杀掉是唯一的最少产奶的那头牛,知道遇到一个周期内没有牛被杀掉。这样就到达了一个稳定的最终状态,统计剩下的牛,和杀掉最后一头牛用去的时间。注意一头牛都不杀的情况应该输出天数为0.不过这题还有更加标准的做法,刘汝佳黑书中提到,将周期相同的奶牛产奶情况用一个堆来维护,每次用一个最小的代表去和其他周期的奶牛比较。删除操作效率比较高。代码: 1 #inc 阅读全文

posted @ 2013-09-12 18:29 rootial 阅读(312) 评论(0) 推荐(0)

POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment
摘要:这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解。不同之处在对是否满足条件的判断,可以求最大流或者最大匹配看匹配数目是否满足题意。POJ 2289:多重二分匹配:360ms 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define esp 1e-611 #define pb push_back1... 阅读全文

posted @ 2013-09-10 23:28 rootial 阅读(213) 评论(0) 推荐(0)

UVA 10269 Adventure of Super Mario
摘要:看了这里 http://blog.csdn.net/acm_cxlove/article/details/8679230的分析之后自己又按照自己的模板写了一遍,算是对spfa又加深了一步认识(以前真是只会用,没想太多)。又来当一次搬运工,一点点进步。题意是这样的:A个村庄,B个城堡,共有K次穿越的机会,且不能经过城堡或者穿越距离必须不超过L,否则必须停下来,当然,不能再道路中间停下来。按照大大的思路是这样做的:对于每出队的一个结点u,均有两种方式继续走下去,一中是使用一次穿越,另一种是不使用。这样对于使用穿越的情况,必须考虑所有满足d[u][v] 2 #include 3 #includ... 阅读全文

posted @ 2013-09-09 21:28 rootial 阅读(194) 评论(0) 推荐(0)

UVA 10608 Friends
摘要:题目大意:共有n个人,m对人为已知的朋友关系,而且这种关系具有传递性,也就是A与B,B与C是朋友,可以确定A与C是朋友,求一个人数最多的朋友团体。bfs就可以了,遇到未访问的结点,加入队列并且朋人数增加,bfs一开始只访问未访问的结点,并作为一个团体的开始。、代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define esp 1e-611 #define pb push_back12 #define in fr... 阅读全文

posted @ 2013-09-08 17:20 rootial 阅读(185) 评论(0) 推荐(0)

POJ - 2711 Leapin' Lizards
摘要:题目大意:在一个网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外。 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距离不超过d的任何一个石柱上。石柱都不稳定,每次当蜥蜴跳跃时,所离开的石柱高 度减1(如果仍然落在地图内部,则到达的石柱高度不变),如果该石柱原来高度为1,则蜥蜴离开后消失。以后其他蜥蜴不能落脚。任何时刻不能有两只蜥蜴在同 一个石柱上。这个应该还算是比较难的网络流的题目了吧, 至少对我这个刚刚接触新手的人来说只这样的,AC的过程是痛苦而又备受煎熬的,最后一步步调试下来成功提交的那刹那,感觉全身满满的正能量,闲话少扯了. 阅读全文

posted @ 2013-09-06 18:57 rootial 阅读(621) 评论(0) 推荐(0)

UVA 125 Numbering Paths
摘要:题目大意:给定n条单向边,求图中任意两点的连通路径的数目。其中点是从0-输入中出现的最大的点。可以用floyd-warshall算法或者dfs.for(int k = 0; k j的通路。 1 #include 2 #include 3 #include 4 #include 5 #define N 30 6 using namespace std; 7 int n, m, dp[N][N]; 8 9 void floyd(void)10 {11 for(int k = 0; k Path保存经过的点,并在dfs搜索下一个点之后再已经走过的Path里面查找看是否存在相应点,如... 阅读全文

posted @ 2013-09-05 16:40 rootial 阅读(172) 评论(0) 推荐(0)

UVA 515 King
摘要:差分约束系统的第一个题目,看了落花大神的博客后,对差分约束有了一定了解,关键在于建图,然后就是判断是否存在负权回路。关于差分约束系统的解释详见维基百科:http://zh.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E7%BA%A6%E6%9D%9F%E7%B3%BB%E7%BB%9F利用spfa判断时,当图中有顶点出队次数多于图中顶点数目时说明存在负环。其实我自己敲上去的时候改了一点点。大神的time[g[x][i].v]当达到n+1时就返回false,这是不对的,因为点包括0嘛,所以最终应该有n+1个点,判断就应该改为达到n+2,而且这一点也从uva上得到证 阅读全文

posted @ 2013-09-03 15:36 rootial 阅读(198) 评论(0) 推荐(0)

UVA 558 Wormholes
摘要:要问是否存在一个总权重为负数的环,用dfs即可解决。time:33ms 1 #include 2 #include 3 #define N 3000 4 using namespace std; 5 int n, m, T, w[N], u[N], v[N], next[N], first[N], pa[N], d[N], tag, i; 6 7 void read_graph(void) 8 { 9 for(int e = 0; e d[x] + w[i],也就是能够继续松弛下去说明图中存在负权回路。time:44ms速度还慢了一点,相比dfs 1 #include 2 #i... 阅读全文

posted @ 2013-09-03 08:43 rootial 阅读(313) 评论(4) 推荐(0)

UVA 10801 Lift Hopping
摘要:算是一道需要动脑筋的最短路问题了,关键在于建图部分,对于n个电梯中每一个都要经过cnt个楼层,a[0],a[1],a[2],a[3],a[4],......a[cnt-1],那么对于任意两个楼层a[j],a[l],都需要建立一条a[j]到a[l]的边,以及另一条反向边。而且为了表示所属的电梯,另外用一个数组tag[e]表示边e所属的电梯,当tag[e1]!=tag[e2],应该在时间上加上60s。然后利用dijsktra+优先队列即可。最近感觉做acm题是真真的开始入门了,不过接触到的算法,是在是少,一步一步慢慢学精吧。坚持做到每天独立的切几题,这样的成就感一定能够使得我越走越远。 1 #in 阅读全文

posted @ 2013-09-02 23:42 rootial 阅读(198) 评论(0) 推荐(0)

UVA 10896 Sending Email
摘要:这个题目真是伤透脑筋了,一直RE,连着改了好几个版本,又是spfa,又是单调队列dijkstra+单调队列,总是不过,后来发现M开小了,双向边应该开m的两倍,悲剧啊!!!以后不管怎样,数组一定要尽量开大点。折磨的真是痛苦,不过发现了一样好东西,http://uvatoolkit.com/problemssolve.phpuva一个测试工具,输入数据能够给出正确结果,以后不用辛苦到网上找AC代码了,直接输入结果。 1 #include 2 #include 3 #include 4 #include 5 #define N 20010 6 #define M 100010 7 #defi... 阅读全文

posted @ 2013-09-02 20:09 rootial 阅读(314) 评论(0) 推荐(0)

导航