随笔分类 -  图论

摘要:把点编号改成1-N,加一点0,从0点到之前任意入度为0的点之间连一条边权为0的边,求0点到所有点的最长路。SPFA模板留底用#include #include #include #include #include #include #include #define ll long long#define inf 1000000000#define maxn 1010using namespace std;struct Edge{ int from,to; int dist; Edge(int a,int b,int c) { from=a,to=b,dis... 阅读全文
posted @ 2013-09-25 10:56 冰鸮 阅读(342) 评论(0) 推荐(0) 编辑
摘要:主要是建图,建好图之后跑一边dijkstra即可。一共3N个点,1~N是原图中的点1~N,然后把每层x拆成两个点(N+x)[用于连指向x层的边]和(N+N+x)[用于连从x层指出的边]。相邻层节点互相可达:AddEdge( N+N+x+1, N+x, C), AddEdge( N+N+x, N+x+1, C);对于位于x层的节点i,AddEdge(N+x, i, 0), AddEdge(i, N+N+x, 0);#include #include #include #include #include using namespace std;const int MAXN = 100010*3;c 阅读全文
posted @ 2013-09-11 20:32 冰鸮 阅读(338) 评论(0) 推荐(0) 编辑
摘要:起点和终点各做一次单源最短路, d1[i], d2[i]分别代表起点到i点的最短路和终点到i点的最短路,枚举商业线车票cost(a, b); ans = min( d1[a] + cost(a, b) + d2[b] );#include #include #include #include #include #include using namespace std;const int MAXN = 1010;const int INF = 1 rhs.d; }};struct Edge{ int from, to, dist; Edge() { } Edge( i... 阅读全文
posted @ 2013-09-07 16:45 冰鸮 阅读(207) 评论(0) 推荐(0) 编辑
摘要:二分爆炸半径R,判断是否可行,如果可行,半径可以继续增加。之前建图有误,结果一直不对。#include #include #include #include #include #include using namespace std;const int MAXN = 222;const double eps = 1e-5;struct Point{ double x, y; Point( double x = 0.0, double y = 0.0 ): x(x), y(y) { } void readPoint() { scanf( "%lf%lf", ... 阅读全文
posted @ 2013-09-02 22:07 冰鸮 阅读(181) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示