雀巢咖啡杯~.~(二) 难得感觉到了最短路的神奇
2011-10-04 21:22
295 查看
同样大萎的.......第二试,打裸的程序比一试更令人#.#
第一题题意是给出n个集合,第i个集合的元素自然数y满足y= s[i]+k*d[i] ,k属于自然数集, 且y<= e[i],满足每个集合的个数的总数不超过10^8, n 不超过200000, e不超过10^9 个,保证有唯一一个数n个集合中出现奇数次,要求找出这个数;
算法是好想的, 奇数只有一个,二分要求的数,o(m)求出在区间【1,m】的数的和,并判奇偶就行了。
当然,亦可以ws的把集合中的数xor 起来.............
第三题不解释了............
============================以上的都是not important 的===================================
给定一个V<=1000 E<=v^2 的无向图,要求你在图中选取若V-1条边,构成一棵树,使得在树中每个节点到1节点的最短距离,等于该节点在原图中到1节点的最短距离相同,并问构造的方案数。
记得曾经一道最小生成树计数,让me 感受到了kruscal 最小生成树的美妙性质。
其实,最短路和最小生成树..............意会吧,大家都懂的。
最短路的性质也很美妙,首先,把dijstra 决策的边弄出来,是一个树(考场上一直在纠结树怎么构造....@.@),
而且,已经标记永久化的节点,所有的东西都确定了,其他的节点不管怎么乱搞都不会对它有影响了。
所以,处理一下dijstra,在标记永久化i点的时候/顺便求一下/有几条边连向i的边/可以在到达i的最短路上(绕口),在用乘法原理统计之...............
继续陶醉ing..............
贴个代码吧:
第一题题意是给出n个集合,第i个集合的元素自然数y满足y= s[i]+k*d[i] ,k属于自然数集, 且y<= e[i],满足每个集合的个数的总数不超过10^8, n 不超过200000, e不超过10^9 个,保证有唯一一个数n个集合中出现奇数次,要求找出这个数;
算法是好想的, 奇数只有一个,二分要求的数,o(m)求出在区间【1,m】的数的和,并判奇偶就行了。
当然,亦可以ws的把集合中的数xor 起来.............
第三题不解释了............
============================以上的都是not important 的===================================
给定一个V<=1000 E<=v^2 的无向图,要求你在图中选取若V-1条边,构成一棵树,使得在树中每个节点到1节点的最短距离,等于该节点在原图中到1节点的最短距离相同,并问构造的方案数。
记得曾经一道最小生成树计数,让me 感受到了kruscal 最小生成树的美妙性质。
其实,最短路和最小生成树..............意会吧,大家都懂的。
最短路的性质也很美妙,首先,把dijstra 决策的边弄出来,是一个树(考场上一直在纠结树怎么构造....@.@),
而且,已经标记永久化的节点,所有的东西都确定了,其他的节点不管怎么乱搞都不会对它有影响了。
所以,处理一下dijstra,在标记永久化i点的时候/顺便求一下/有几条边连向i的边/可以在到达i的最短路上(绕口),在用乘法原理统计之...............
继续陶醉ing..............
贴个代码吧:
program lmd; const mo=1 shl 31-1; var c,next,l,sum:array[0..1000000]of longint; dist,way:array[0..3000]of longint; yes:array[0..3000]of boolean; k,i,j,bj,x,y,z,n,m,top:longint; ans:int64; procedure inf; begin assign(input,'castle.in'); assign(output,'castle.out'); reset(input); rewrite(output); end; procedure ouf; begin close(Input); close(output); end; procedure link(x,y,z:longint); begin inc(top); next[top]:=l[x]; l[x]:=top; sum[top]:=y; c[top]:=z; end; procedure init; begin read(n,m); for i:=1 to m do begin read(x,y,z); link (x,y,z); link (y,x,z); end; fillchar(dist,sizeof(dist),127); fillchar(yes,sizeof(yes),true); dist[1]:=0; way[1]:=1; end; procedure dijstra; begin for i:=1 to n do begin bj:=0; for j:=1 to n do if yes[j] and (dist[j]<dist[bj]) then bj:=j; yes[bj]:=false; if bj<>0then begin k:=l[bj]; while k<>0 do begin if dist[sum[k]]>dist[bj]+c[k] then begin dist[sum[k]]:=dist[bj]+c[k]; way[sum[k]]:=1; end else if dist[sum[k]]=dist[bj]+c[k] then inc(way[sum[k]],1); k:=next[k]; end; end; end; end; procedure print; begin ans:=1; for i:=1 to n do ans:=(ans*way[i]) mod mo; write(ans); end; begin inf; init; dijstra; print; ouf; end.
相关文章推荐
- HDU 3873 必须写一个解题报告,很神奇的最短路
- 51nod 1693 水群(神奇的最短路!)
- 最短路的神奇用法 bzoj1550 避开怪兽
- bzoj4152(神奇的最短路)
- 神奇的最短路-uva658
- hdu6071神奇的最短路
- DP入门系列二--DAG之二最短路(硬币问题)
- JS短路原理的应用示例 精简代码的途径
- 2017 Wuhan University Programming Contest 现场赛 K.Wifi Relay(最短路变形)
- 移动平台的meta标签-----神奇的功效
- zzuoj 10408 最短路(dijistla||贝尔曼福特 求最少转站点)
- 【DayDayUp】【算法_图_最短路_之二_SPFA最劣、Dij堆优化&Johnson(结点对最短路)】(待续)
- hdu 1860 Currency Exchange(最短路、深搜spfa)
- hdu 2112 HDU Today (最短路)
- POJ-3463: Sightseeing 【最短路次短路及条数】
- 十四项神奇心理定律
- 16种发动机动态工作原理图,神奇的帅呆了!
- 【BZOJ】1179 [Apio2009]Atm 强连通分量+最短路
- 巨头的移动时代(8):短路的运营商
- Heavy Transportation(最短路变形)