http://poj.org/problem?id=1062

这个题目有一点点特别,因为数据很小也可以用Floyd跑,但是个人比较钟爱dij。

这个dij是怎么走的呢,首先就是普通的建图,然后就是带上一个地位限制的dij,其他都是一样的。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#include <algorithm>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 1e5 + ;
struct node
{
int to, dist, nxt;
node(int to=,int dist=):to(to),dist(dist){}
}exa[maxn];
struct heapnode
{
int u, d;
heapnode(int u=,int d=):u(u),d(d){}
bool operator<(const heapnode&a)const
{
return a.d < d;
}
};
int cnt = ;
int head[maxn];
void add(int u,int v,int w)
{
exa[++cnt] = node(v, w);
exa[cnt].nxt = head[u];
head[u] = cnt;
} int ans = ;
int d[maxn], level[maxn], p[maxn];
bool vis[maxn];
int dij(int l,int r)
{
memset(vis, , sizeof(vis));
memset(d, inf, sizeof(d));
d[] = ;
ans = p[];
priority_queue<heapnode>que;
que.push(heapnode(, ));
while(!que.empty())
{
heapnode x = que.top(); que.pop();
int u = x.u;
if (vis[u]) continue;
vis[u] = true;
for(int i=head[u];i;i=exa[i].nxt)
{
node e = exa[i];
if (level[e.to]<l || level[e.to]>r) continue;
if(d[e.to]>d[u]+e.dist)
{
d[e.to] = d[u] + e.dist;
ans = min(ans, d[e.to] + p[e.to]);
que.push(heapnode(e.to, d[e.to]));
}
}
}
return ans;
} int main()
{
int m, n;
memset(head, , sizeof(head));
scanf("%d%d", &m, &n);
for(int i=;i<=n;i++)
{
int x;
scanf("%d%d%d", &p[i], &level[i], &x);
for(int j=;j<=x;j++)
{
int a, b;
scanf("%d%d", &a, &b);
add(i, a, b);
}
}
int ex = inf;
for(int l=level[],r=level[]+m;r>=level[];r--,l--)
{
ex=min(ex,dij(l, r));
}
printf("%d\n", ex);
return ;
}

最新文章

  1. (七)Maven使用的最佳实践
  2. Leetcode 4Sum
  3. linux基础
  4. Android三种播放视频的方式
  5. bzoj1503
  6. Sails 关闭自动路由 Automatic Routes 功能。
  7. C++中用二维数组传参时形参该怎样写[转]
  8. 关于SringMvc的参数的传递
  9. Kth Ancestor 第k个祖先问题
  10. LGA(land grid array)
  11. 新秀系列C/C++经典问题(六)
  12. 深入理解Solaris内核中互斥锁(mutex)与条件变量(condvar)之协同工作原理
  13. pat L2-006. 树的遍历
  14. javascript中函数声明与函数表达式的区别
  15. keepalived实现服务高可用
  16. php 把驼峰样式的字符串转换成下划线样式的字符串
  17. CRC32明文攻击
  18. matlab练习程序(地图上画经纬度)
  19. iOS 开发:绘制像素到屏幕
  20. Ansible 快速部署 Zabbix 4

热门文章

  1. 【Java】从Null开始,在Windows上下载和安装JDK
  2. 提升效率必备!8个超好用的Python内置函数
  3. 美化你的终端利器Iterm2
  4. Flask基础-01.Flask简介
  5. spring boot 项目 mvn clean install 报 &quot;Unable to find main class&quot; 的解决方法
  6. NCTF2019 小部分题解
  7. Flair:一款简单但技术先进的NLP库
  8. Python神库分享之geoip2 IP定位库
  9. 域名和服务器绑定及https协议更换
  10. Ubuntu创建WiFi:16.0.4