摘要: 题目大意:有n个电站,每个电站都有一定的电量,电站之间有一定距离,我们要从0点出发去占领一些电站,使得占领的电站电量之和超过总电量的一半,求达到条件所要走的最短距离。如果可能的话,输出距离,否则输出不可能。题解:首先计算所有点到起点的最短路,就得到了代价,现在又有价值,那么就是一个01背包~#inc... 阅读全文
posted @ 2014-03-23 19:16 forever97 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定无向图,每一条路上都有限重,求能到达目的地的最大限重,同时算出其最短路。题解:由于有限重,所以二分检索,将二分的值代入最短路中,不断保存和更新即可。#include #include #include #include using namespace std; const int N=20005; const int INF=9999999; typedef pairseg; priority_queue,greater >q; int l,r,mid,begin,end,d[N],head[N],u[N],v[N],w[N],next[N],le[N],n... 阅读全文
posted @ 2014-03-23 16:13 forever97 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题解:由于是多个起点和单个终点,所以反向构图,那么就是多个终点和单个起点了,于是直接最短路。#include #include #include #include using namespace std; const int N=20005; const int INF=9999999; typedef pairseg; priority_queue,greater >q; int begin,end,d[N],head[N],u[N],v[N],w[N],next[N],n,m,a,b,c,k; bool vis[N]; void build(){ mems... 阅读全文
posted @ 2014-03-23 15:21 forever97 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 最短路~#include #include #include #include using namespace std; const int N=20005; const int INF=9999999; typedef pairseg; priority_queue,greater >q; int begin,end,d[N],head[N],u[N],v[N],w[N],next[N],n,m,a,b,c; bool vis[N]; void build(){ memset(head,-1,sizeof(head)); for(int e=1;ed[... 阅读全文
posted @ 2014-03-23 14:56 forever97 阅读(151) 评论(0) 推荐(0) 编辑