2013年7月30日
摘要:
题目链接:http://poj.org/problem?id=2375题目大意:一片滑雪场,奶牛只能向相邻的并且不高于他当前高度的地方走。想加上缆车是的奶牛能从低的地方走向高的地方,求最少加的缆车数,是的奶牛可以从任意一个角落到达任意另外的角落解题思路:奶牛可以向相邻的不高于他的地方走,相当于u,v之前连通。若想加上缆车是图成为连通图,数目就是max(root, leave);思路同POJ 1236代码如下:#include#include#includeusing namespace std;#define M 505#define N 2000005struct Edge{ int ...
阅读全文
posted @ 2013-07-30 22:49
crying_Dream
阅读(287)
推荐(0)
编辑
摘要:
题目链接:http://poj.org/problem?id=1236题目大意:给出N台电脑,电脑间单向连通传送文件问题1.网络中最少放几个文件保证所有电脑都能接受到文件问题2.最少向网络中加几条线保证任意放1个文件所有电脑都能接受到解题思路:1.求出强连通分量2.缩点 ,进行重新构图3.如果入度为0,说明没有文件传输到该网络。解决问题1,统计入度为0的个数即可4.一个强连通图的入度和出度都不为0。入度为0相当于根root,出度为0相当于叶子leave.max(root, leave)即为答案。就是需要加的线数,保证整个网络强连通。若连通分量个数为0,那么答案为0代码如下:#include#i
阅读全文
posted @ 2013-07-30 22:48
crying_Dream
阅读(277)
推荐(0)
编辑
摘要:
题目大意:给出N头牛,有M种关系u, v。代表u牛崇拜v牛。要求找出有多少头牛被所有牛崇拜着题目链接:http://poj.org/problem?id=2186解题思路:1>求出强连通分量,标记每头牛属于哪个分量内2>进行缩点,计算连通分量的个数x,给出的M组关系重新构图。u,v若属不于一个连通分量内out[belong[u]]++;3>统计x个连通分量出度。如果超过1个的连通分量出度为0,证明两群牛互不崇拜; 如果等于1 答案就是该分量中牛的个数.代码如下:#include#include#includeusing namespace std;#define N 1000
阅读全文
posted @ 2013-07-30 22:46
crying_Dream
阅读(199)
推荐(0)
编辑
摘要:
#include#include#includeusing namespace std;#define N 1000005#define INF 999999999int head[N], vis[N], queue[N], dis[N], outqueue[N];int n, index;struct Edge{ int v, value, next;}edge[N];void add_Edge(int u, int v, int val){ edge[index].next=head[u]; edge[index].v=v; edge[index].value=va...
阅读全文
posted @ 2013-07-30 22:44
crying_Dream
阅读(240)
推荐(0)
编辑
摘要:
题目链接:http://poj.org/problem?id=1364题目大意:是否存在一个序列满足给的m组条件si ni oi ki如果oi=gt 表示:S(i+ni)-Si>ki如果oi=lt 表示:S(i+ni)-Si S(i+ni)-Si Si-S(i+ni)#include#includeusing namespace std;#define N 100000#define M 100000#define INF 999999999int dis[N]; //记录距离int vis[N]; //标记是否在队列中int queue[N]; //模拟队列int outqueue[N
阅读全文
posted @ 2013-07-30 22:42
crying_Dream
阅读(263)
推荐(0)
编辑
摘要:
差分约束:解决满足条件的不等式为了保证图连通,引入附加点vs,使图中每个点vi到vs都可达,设弧的权w(vs, vi)=0.对于每个差分约束xj-xi权值为bk;初始化dis[vs]=0, dis[vi]=INF;然后求以vs为源点的最短路径。由于存在负权值,因此可以用Spfa算法求spfa算法:1.将源点加入队列, dis[s]=0, 其他点为无穷大2.将队头取出标记为front,遍历与他相邻的点x;3.如果dis[x]>dis[front]+edge[x].value即源点到x的距离大于源点到front的距离+front到x点的距离,更新dis[x].并且如果x不在队列中将它入队.重
阅读全文
posted @ 2013-07-30 22:40
crying_Dream
阅读(276)
推荐(0)
编辑
摘要:
Description"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, he told them a story. "Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighboring country sent them Pr
阅读全文
posted @ 2013-07-30 22:40
crying_Dream
阅读(311)
推荐(0)
编辑
摘要:
K短路 用dijsktra+A*启发式搜索当点v第K次出堆的时候,这时候求得的路径是k短路。A*算法有一个启发式函数f(p)=g(p)+h(p), 即评估函数=当前值+当前位置到终点的最短距离g(p):当前从s到p点所走的路径长度,h(p)就是点p到目的点t的最短距离。f(p)就是当前路径从s走到p在从p到t的所走距离。步骤:1>求出h(p)。将有向边反向,求出目的点t到所有点的最短距离,用dijkstra算法2>将原点s加入优先队列中3>优先队列取出f(p)最小的一个点p如果p==t,并且出来的次数恰好是k次,那么算法结束否则,如果p出来的次数多余k次,就不用再进入队列中否
阅读全文
posted @ 2013-07-30 22:37
crying_Dream
阅读(1819)
推荐(0)
编辑