poj 1603 Risk_spfa向前星】的更多相关文章

poj终于到100题,贴个代码纪念一下,hdu 到400题再贴 题意:有20个城市,接下来有19行告诉你,i城市与n个城市相连,图是双向的,然后叫你求x到y的最小经过几个城市 #include <iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; /* run this program using the console pauser or add…
Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12674   Accepted: 5651 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X …
Candies POJ-3159 这里是图论的一个应用,也就是差分约束.通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时). #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<queue>…
通过最小生成树(prim)和最短路径优化引出的向前星存图,时至今日才彻底明白了.. head[i]存储的是父节点为i引出的最后一条边的编号, next负责把head[i]也就是i作为父节点的所有边连接起来,next也是存的编号, 在所存的edge结构体中,只有w是保存边的值,而u是保存的子节点. 这样设置的话,由head[i]就可以引出所有与i相关的边和点, 显而易见,这样的存放方法空间+时间复杂度双优化,比邻接矩阵是优化多了.. 然后就是prim算法, 最小生成树的一种算法,适用于稠密图,因为…
这道模版用到了链式向前星表示法: struct node { int v,next; }edge[]; void add(int x,int y) { edge[++cnt].next=heads[x]; edge[cnt].v = y; heads[x]=cnt; return ; } 有地方写错了,应该是i=edge[i].next 输入:一个图有向图.输出:它每个强连通分量. input: 6 8 1 3 1 2 2 4 3 4 3 5 4 6 4 1 5 6 output: 6 5 3…
代码: struct NODE{ int to; int nxt; int c; }node[MM];//链式向前星 ; void add(int a,int b,int c){ node[lcnt].to=b; node[lcnt].c=c; node[lcnt].nxt=head[a]; head[a]=lcnt++; } 显示神奇代码 1.使用结构体构建链式向前星的容器 链式向前星本质上是使用链表存边,一条链表代表着一个点发出的所有边.所以一个这个结构体代表着这条链表中的一项 struct…
题目: A 国有 n 座城市,n−1 条双向道路将这些城市连接了起来,任何两个城市都可以通过道路互通. 某日,A 国爆发了丧尸危机,所有的幸存者现在都聚集到了 A 国的首都(首都是编号为 1 的城市).而其它城市的丧尸会时不时地向首都发起进攻. 为了抵御丧尸的攻击,幸存者在 A 国的每座城市都修建了防御工事.编号为 i 的城市,其防御工事强度为 di. 当一只丧尸决定进攻首都时,它会从某城市 u(u≠1) 沿经过道路数量最少的路径前往首都.沿途,这只丧尸会试图突破当地的防御工事. 对于某座防御工…
Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 19881   Accepted: 7114 Description Several currency exchange points are working in our city. Let us suppose that each point specializes in two particular currencies and pe…
地铁修建 201703-4 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值. 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的最小值. 在松弛的时候,注意是d[i]>max(d[u],cost),max保证了是所有路径中的最长边,>号保证了是最小值. 这里使用前向星+优先队列对dijikstra算法进行了优化. //#include <iostream> //#include<cstdio> //…
Invitation Cards POJ-1511 从这道题我还是发现了很多的问题,首先就是快速输入输出,这里的ios::---这一行必须先放在main函数第一行,也就是输入最开始的前面,否则系统疯狂报WA. 其次就是,ios的位置没有错之后又疯狂地报TLE,就是超时了,这个问题要不就是算法的复杂度,还有就是输入输出还是不够快,所以首先排除输入输出的问题,所以我把ios改成了scanf所以这题就过了. 事实证明,ios的方法还是没有scanf快,所以以后还是使用scanf. 其次就是这个算法本身…