HDU-4318 Power transmission 模型转化
2012-07-27 02:00
369 查看
这题在比赛的时候没做出来实在是不应该。本来也是用对数处理的,但是后面写的七零八落的。
这题也可以直接求,记录每个点最少消耗的流量,剩余流量为初始流量减去这个值,逐步向下迭代。
当然这里可以去求他的剩余值,根据公式 最后的流量 L = I * (1-p1) * (1-p2) * ... * (1-pn) 我们对两边同时取对数的话,那么我们就将乘法化成了加法,并且直接求一个最长路就可以了。最后再拿总流量减去最大的剩余量即可。
代码如下:
这题也可以直接求,记录每个点最少消耗的流量,剩余流量为初始流量减去这个值,逐步向下迭代。
当然这里可以去求他的剩余值,根据公式 最后的流量 L = I * (1-p1) * (1-p2) * ... * (1-pn) 我们对两边同时取对数的话,那么我们就将乘法化成了加法,并且直接求一个最长路就可以了。最后再拿总流量减去最大的剩余量即可。
代码如下:
#include <cstdio> #include <cstring> #include <cstdlib> #include <queue> #include <algorithm> #include <cmath> #define eps 1e-6 using namespace std; int head[50005], N, idx, S, T, P, q[10000005], visit[50005]; double dis[50005]; struct Edge { int v, next; double fee; }e[2500005]; void insert(int x, int y, int fee) { ++idx; e[idx].v = y, e[idx].fee = log(1 - fee/100.); e[idx].next = head[x], head[x] = idx; } void spfa() { int front = 0, tail = 1, pos; q[tail] = S; fill(dis+1, dis+N+1, 0); dis[S] = log(1.*P); while (front != tail) { pos = q[++front]; visit[pos] = 0; for (int u = head[pos]; u != -1; u = e[u].next) { if (dis[pos] + e[u].fee - dis[e[u].v] > eps) { dis[e[u].v] = dis[pos] + e[u].fee; if (!visit[e[u].v]) { // spfa中防止多次入队 q[++tail] = e[u].v; visit[e[u].v] = 1; } } } } if (dis[T] == 0) { puts("IMPOSSIBLE!"); } else { printf("%.2lf\n", P - exp(dis[T])); } } int main() { int M, y, fee; while (scanf("%d", &N) == 1) { memset(head, -1, sizeof (head)); memset(visit, 0, sizeof (visit)); idx = -1; for (int i = 1; i <= N; ++i) { scanf("%d", &M); for (int j = 1; j <= M; ++j) { scanf("%d %d", &y, &fee); insert(i, y, fee); } } scanf("%d %d %d", &S, &T, &P); spfa(); } return 0; }
相关文章推荐
- HDU 4318 Power transmission 最长路 (dijkstra + 优先队列) 水
- hdu 4318 Power transmission(最短路)
- HDU 4318 Power transmission(最短路变形)
- hdu - 4318 - Power transmission - 最短路+贪心
- hdu 4318 Power transmission 临接表 广搜 多校联合赛(二) 第九题
- HDU 4318 Power transmission(最短路)
- HDU 4318 Power transmission (dijkstra && 邻接表从队友那里抄来的,当作模板吧)
- HDU-1257 最少拦截系统 【LIS转化模型(vector应用)】
- HDU OJ 4318 Power transmission【最短路spfa】
- HDU Power transmission(最短路)
- 【HDU 3663】 Power Stations 【精确覆盖】
- HDU 5974 A Simple Math Problem(转化解方程)
- hdu 1171 Big Event in HDU(多重背包转化为01背包)
- hdu 2133 日期的格式转化
- MUTC 2 D - Power transmission 最短路
- PowerDesigner之PDM(物理概念模型)
- HDU 2476 字符串a转化为字符串b需要几次操作 结合编辑距离
- 2017 多校训练第一场 HDU 6034 Balala Power!
- hdu 6034 Balala Power!
- hdu 6034 Balala Power!(贪心)( 2017 Multi-University Training Contest - Team 1 )(无耻之sort)