博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Luogu 1073] NOIP2009 最优贸易
阅读量:5107 次
发布时间:2019-06-13

本文共 2183 字,大约阅读时间需要 7 分钟。

[Luogu 1073] NOIP2009 最优贸易


分层图,跑最长路。

真不是我恋旧,是我写的 Dijkstra 求不出正确的最长路,我才铤而走险写 SPFA 的…

#include 
#include
#include
#include
const int MAXN = 100010; int n, m, value[MAXN]; struct Graph{ struct Edge { int to, w; Edge *next; Edge(int to, int w, Edge* next): to(to), w(w), next(next) {} ~Edge(void) { if(next != NULL) delete next; } }*head[MAXN * 3]; Graph(int n) { std :: fill(head, head + n * 3 + 1, (Edge*)NULL); head[n] = new Edge(0, 0, head[n]); head[n * 3] = new Edge(0, 0, head[n * 3]); } ~Graph(void) { for(int i = 0; i <= n * 3; ++i) delete head[i]; } void AddEdge(int u, int v) { head[u] = new Edge(v, 0, head[u]); head[u] = new Edge(v + n, -value[u], head[u]); head[u + n] = new Edge(v + n, 0, head[u + n]); head[u + n] = new Edge(v + n * 2, value[u], head[u + n]); head[u + n * 2] = new Edge(v + n * 2, 0, head[u + n * 2]); }}*G; namespace SPFA{ bool exist[MAXN * 3]; int dist[MAXN * 3]; std :: queue
Q; void SPFA(void) { memset(dist, 0xc0, sizeof dist); Q.push(1); exist[1] = true; dist[1] = 0; while(!Q.empty()) { int u = Q.front(), v; Q.pop(); exist[u] = false; for(Graph :: Edge *i = G -> head[u]; i != NULL; i = i -> next) if(dist[v = i -> to] < dist[u] + i -> w) { if(!exist[v]) Q.push(v); dist[v] = dist[u] + i -> w; } } }}int main(void){ scanf("%d %d", &n, &m); G = new Graph(n); for(int i = 1; i <= n; ++i) scanf("%d", &value[i]); for(int i = 1, x, y, z; i <= m; ++i) { scanf("%d %d %d", &x, &y, &z); G -> AddEdge(x, y); if(z == 2) G -> AddEdge(y, x); } SPFA :: SPFA(); printf("%d\n", SPFA :: dist[0]); delete G; return 0; }

转载于:https://www.cnblogs.com/Capella/p/9932938.html

你可能感兴趣的文章
Cadence Allegro 如何关闭铺铜(覆铜)shape的显示和设置shape显示模式–allegro小技巧...
查看>>
Atcoder Grand Contest 004 题解
查看>>
MFC中 给对话框添加背景图片
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
idea 系列破解
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)
查看>>
dependency injection
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
C#综合揭秘——细说多线程(下)
查看>>
c#运算符 ?
查看>>
Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...
查看>>
【题解】青蛙的约会
查看>>
【eclipse】点Clean后没反应
查看>>
求给定字符串的最长子字符串
查看>>
.26-浅析webpack源码之事件流make(1)
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>