题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2851

题目大意:给出N条路径,M个终点(是路径的编号) 。重合的路径才算连通的,且路径是单向的。每条路径都有一个cost。求到达指定路径的最小cost。

解题思路

题目读懂了,但是却看不懂样例。

题目中的最小单位路径应该看成一个点,cost在点上。

建图

枚举任意两条路径$i$、$j$,如果有交叉,即$E[i]>=S[j]$那么从i到j连一条有向边。cost保留在$W[i]$、$W[j]$上。

Dijkstra

由于起点必须在第一条路径,所以d[1]=W[1],其余d[i]=inf。

Dijkstra后,再输入对于每个终点,d[des]就是结果。

代码

#include "cstdio"
#include "queue"
#include "cstring"
using namespace std;
#define maxn 2005
#define inf 0x3f3f3f3f
int head[maxn],tot,vis[maxn],S[maxn],E[maxn],W[maxn],d[maxn];
int T,n,m,des;
struct Edge
{
int to,next,w;
}e[maxn*maxn];
struct status
{
int d,p;
status(int d,int p):d(d),p(p) {}
bool operator < (const status &a) const {return d>a.d;}
};
void addedge(int u,int v)
{
e[tot].to=v;
e[tot].next=head[u];
head[u]=tot++;
}
void dijkstra(int s)
{
memset(vis,,sizeof(vis));
priority_queue<status> Q;
Q.push(status(,s));
for(int i=;i<=n;i++) d[i]=(i==s?W[s]:inf);
while(!Q.empty())
{
status x=Q.top();Q.pop();
int u=x.p;
if(vis[u]) continue;
for(int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].to;
if(d[u]+W[v]<d[v])
{
d[v]=d[u]+W[v];
Q.push(status(d[v],v));
}
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
tot=;
memset(head,-,sizeof(head));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d%d%d",&S[i],&E[i],&W[i]);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(E[i]>=S[j]) addedge(i,j);
dijkstra();
for(int i=;i<=m;i++)
{
scanf("%d",&des);
if(d[des]!=inf) printf("%d\n",d[des]);
else printf("-1\n");
}
}
}

HDU 2851 (最短路)的更多相关文章

  1. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  2. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. hdu 5521 最短路

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  4. HDU - 2544最短路 (dijkstra算法)

    HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...

  5. hdu - 2851 Lode Runner (最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=2851 首先有n层,每层的路径都有一个起点和终点和对应的危险值,如果某两层之间有交集,就能从这一层上到另外一层,不 ...

  6. hdu 2851(最短路)

    点击打开链接 竟然是最短路!!!! 藏的好深啊 /* 求从路1走到路i的最小危险值, 给出n条路的起点和终点,当i,j两路有重合的,我们使map[i][j]=v[j]: 把路当作最短路中的点,如果有重 ...

  7. HDU2112 HDU Today 最短路+字符串哈希

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. hdu 2544 最短路

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shi ...

  9. hdu 2544 最短路 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目分析:比较简单的最短路算法应用.题目告知起点与终点的位置,以及各路口之间路径到达所需的时间, ...

随机推荐

  1. ThinkPHP入门(二)

    smarty使用 smarty引入流程 1. 控制器IndexAction.class.php function index() $this -> display(); (父类Action的di ...

  2. ListView + PopupWindow实现滑动删除

    原文:ListView滑动删除 ,仿腾讯QQ(鸿洋_) 文章实现的功能是:在ListView的Item上从右向左滑时,出现删除按钮,点击删除按钮把Item删除. 看过文章后,感觉没有必要把dispat ...

  3. Task使用小结

    Task是.NET推出数据任务处理的工作类,Task的使用也被越来越多的人讲解,这里仅仅介绍Task的部分使用介绍: 1.Task简单创建 --无返回值 Task.Factory.StartNew(( ...

  4. 【JAVA网络流之TCP与UDP 】

    一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...

  5. 重新开始刷dp,哈哈哈

    转载于: http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2015年1月29日 从头开始

  6. C字符数组赋值(转)

    举例如下: char a[10];1.定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如 char a[10]; a[10]=" ...

  7. LaTex学习笔记(一)

    1. 语法 命令 普通命令 环境 数据 注释 2. 物理结构 导言 指定文档类型,引入宏包,定义命令,环境等 \documentclass[options]{class} \usepackage[op ...

  8. 62个Android Studio小技巧合集

    1书签(Bookmarks) 描述:这是一个很有用的功能,让你可以在某处做个标记(书签),方便后面再跳转到此处. 调用:Menu → Navigate → Bookmarks 快捷键: 添加/移除书签 ...

  9. Java学习随笔2:Java复合赋值表达式的小问题

    问题:i += j只是i = i + j的简写么? 答案:非也!看下面的程序: int i = 5; long j = 8; i += j; // 可以通过编译且结果正确 i = i + j; // ...

  10. java基本数据类型及相互间的转换

    1.首先复习一下java的基本数据类型,见下图 2.比较他们的字节数 备注:1字节(Byte)=8位(Bit) 3.转换中的知识点 *java中整数类型默认的int类型:小数类型默认的double: ...