随笔分类 -  ACM_Uva

1 2 下一页

Uva 12361 File Retrieval 后缀数组+并查集
摘要:题意:有F个单词,1 h[v]的子串所在的单词形成的并查集中,得到的并查集中单词一定有长度>=h[v]公共字串,这样的并查集实际就是一个合法的单词集合,可以利用二进制表示,每次得到新的集合则将二进制表示加入到统计集合的set中,最后结果就是set的大小。AC代码其实是比赛时写的,当时多个单词部分不... 阅读全文

posted @ 2014-08-28 00:04 rootial 阅读(247) 评论(0) 推荐(0)

UVA 11090 Going in Cycle!!
摘要:要求给定的图的中平均权值最小的环,注意处理自环的情况就能过了。按照w1+w2+w3+….wn #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#define lson l, m, rt VI;typedef pair pii;typedef vector VII;typedef vector VIII;typ... 阅读全文

posted @ 2013-11-02 19:12 rootial 阅读(341) 评论(0) 推荐(0)

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

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

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

posted @ 2013-09-26 12:19 rootial 阅读(408) 评论(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 阅读(303) 评论(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 阅读(229) 评论(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 阅读(258) 评论(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 阅读(205) 评论(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 阅读(250) 评论(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 阅读(227) 评论(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 阅读(262) 评论(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 阅读(303) 评论(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 阅读(187) 评论(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 阅读(178) 评论(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 阅读(161) 评论(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 阅读(193) 评论(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 阅读(307) 评论(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 阅读(194) 评论(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 阅读(311) 评论(0) 推荐(0)

UVA 1513 Movie collection
摘要:1 #include 2 #include 3 #include 4 #define N 200010 5 #define lson l,m,rt=N-n)&&l>1;25 build(lson);26 build(rson);27 PushUp(rt);28 }29 30 void update(int i,int c,int l,int r,int rt)31 {32 if(l==r)33 {34 sum[rt]=c;35 return;36 }37 int m=(l+r)>>1;38 if(... 阅读全文

posted @ 2013-08-07 00:57 rootial 阅读(331) 评论(0) 推荐(0)

1 2 下一页

导航