博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3159 差分约束+spfa
阅读量:4980 次
发布时间:2019-06-12

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

差分约束第一题,想明白以后就可以建图了。由于此题数据特殊,队列优化的spfa会超时,可以改成用栈来优化。

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int INF = 9999999; 8 const int N = 30001; 9 const int M = 150000;10 int head[N];11 int dist[N];12 bool visit[N];13 int n, m, e;14 15 struct Edge16 {17 int v, next, w;18 } edge[M];19 20 void addEdge( int u, int v, int w )21 {22 edge[e].v = v;23 edge[e].w = w;24 edge[e].next = head[u];25 head[u] = e++;26 }27 28 void spfa( int s )29 {30 for ( int i = 1; i <= n; i++ )31 {32 dist[i] = INF;33 visit[i] = false;34 }35 dist[s] = 0;36 visit[s] = true;37 int q[N], top = 0;38 q[top++] = s;39 while ( top )40 {41 int u = q[--top];42 visit[u] = false;43 for ( int j = head[u]; j != -1; j = edge[j].next )44 {45 int v = edge[j].v, w = edge[j].w;46 if ( dist[v] > dist[u] + w )47 {48 dist[v] = dist[u] + w;49 if ( !visit[v] )50 {51 q[top++] = v;52 visit[v] = true;53 }54 }55 }56 }57 }58 59 int main ()60 {61 while ( scanf("%d%d", &n, &m) != EOF )62 {63 e = 0;64 memset( head, -1, sizeof(head) );65 while ( m-- )66 {67 int u, v, w;68 scanf("%d%d%d", &u, &v, &w);69 addEdge( u, v, w );70 }71 spfa(1);72 printf("%d\n", dist[n]);73 }74 return 0;75 }

 

转载于:https://www.cnblogs.com/huoxiayu/p/4766359.html

你可能感兴趣的文章
解析IP地址与MAC地址
查看>>
在win7下,easyphp安装过程中MSVCR110.DLL没有被指定在WINDOWS上运行,或者它包含错误...
查看>>
Win8下各种加密算法
查看>>
有关类方法调用的概括
查看>>
(转载)驱动之路-platform按键驱动
查看>>
nd.array.where
查看>>
Recipe 19.2. Building a List from Any Iterable
查看>>
oracle数据库DB_NAME、DBID、DB_UNIQUE_NAME等的区别
查看>>
搜集:css中的filter属性语法说明
查看>>
BufferedWriter知識點復習
查看>>
asp.net错误处理封装
查看>>
用SQL语句操作·数据
查看>>
java 动手动脑
查看>>
LoadRunner性能测试之常见函数及参数的说明和作用
查看>>
注意的
查看>>
1407251735-hd-美素数.cpp
查看>>
国内大型的内部 C# 编程规范
查看>>
自己主动配置数据库_控制台版本 还原数据库
查看>>
OpenStreetMap初探(一)——了解OpenStreetMap
查看>>
手动删除数据库表,并注释创建的model后,同步数据库命令操作
查看>>