题意:给出多个可选择的起始点和终点,求最短路

思路:执行起始点次的spfa即可

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 1100
#define MAXM 5000
#define inf 2000000000
struct Edge
{
int to,next;
int time;
}edge[MAXM];
int ans,tot;
int pre[MAXM],head[MAXM],que[MAXM];
int vis[MAXM],dis[MAXM],tar[MAXN];
void addedge(int u,int v,int c)
{
edge[tot].to=v;
edge[tot].next=head[u];
edge[tot].time=c;
head[u]=tot++;
edge[tot].to=u;
edge[tot].next=head[v];
edge[tot].time=c;
head[v]=tot++;
}
void spfa(int s)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<MAXN;i++)
dis[i]=inf;
dis[s]=0;
vis[s]=true;
int front,rear;
front=rear=0;
que[rear++]=s;
while(front!=rear)
{
int pre=que[front++];
vis[pre]=true;
int v;
for(int j=head[pre];j!=-1;j=edge[j].next)
{
v=edge[j].to;
if(dis[v]>dis[pre]+edge[j].time)
{
dis[v]=dis[pre]+edge[j].time;
if(tar[v]==1)
{
if(dis[v]<ans)
ans=dis[v];
}
if(!vis[v])
{
vis[v]=true;
que[rear++]=v;
}
}
}
vis[pre]=false;
}
}
void Init()
{
tot=0;
memset(head,-1,sizeof(head));
}
int si[MAXN];
int main()
{
int T,S,D;
while(scanf("%d%d%d",&T,&S,&D)!=EOF)
{
int a,b,c;
Init();
ans=inf;
for(int i=0;i<T;i++)
{
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
} memset(tar,0,sizeof(tar));
for(int i=0;i<S;i++)
{
scanf("%d",&si[i]);
}
for(int i=0;i<D;i++)
{
scanf("%d",&a);
tar[a]=1;
}
for(int i=0;i<S;i++)
{
spfa(si[i]);
}
printf("%d\n",ans);
}
return 0;
}

hdu 2066 最短路水题的更多相关文章

  1. hdu 2066 ( 最短路) Floyd & Dijkstra & Spfa

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 今天复习了一下最短路和最小生成树,发现居然闹了个大笑话-----我居然一直写的是Floyd,但我自己一直以 ...

  2. hdu 1106:排序(水题,字符串处理 + 排序)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  3. HDU 4950 Monster (水题)

    Monster 题目链接: http://acm.hust.edu.cn/vjudge/contest/123554#problem/I Description Teacher Mai has a k ...

  4. HDU 4813 Hard Code 水题

    Hard Code Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.act ...

  5. HDU 4593 H - Robot 水题

    H - RobotTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.act ...

  6. HDOJ/HDU 2560 Buildings(嗯~水题)

    Problem Description We divide the HZNU Campus into N*M grids. As you can see from the picture below, ...

  7. HDOJ(HDU) 1859 最小长方形(水题、、)

    Problem Description 给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内.长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内 ...

  8. HDU - 1716 排列2 水题

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. HDU—2021-发工资咯(水题,有点贪心的思想)

    作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵  但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每 ...

随机推荐

  1. Spring框架集成mybatis框架的配置(笔记)

    <!-- 0.注解扫描 --><!-- 1.导入外部文件 --><!-- 2.数据源 --><!-- 3.session Factory -->< ...

  2. 让这三个月来的更猛烈些吧,前端react同构项目

    昨天一篇文章讲述了我在这三个月中由.net到java的过程,其中踩坑填坑的细节真不是三言两语可以道尽,而完成时的喜悦也远非寻常可比(仅次于涨工资).然而到这并不算完结,作为前后端分离的忠实粉丝,我认为 ...

  3. C# 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案

    Windows 8.1, Win10之后,通过GetVersion and GetVersionEx 方法获取WIndows操作系统版本号的功能需要添加manifest文件后才能查找到,不然的话会查找 ...

  4. opencv 小程序170323

    1.滤波 GaussianBlur(imgThresholded, imgThresholded, Size(5, 5), 0, 0);//高斯滤波 medianBlur(imgThresholded ...

  5. 一次使用pywin32学到的知识

    FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串.这个函数不搜索子窗口. FindWindowEx:FindWindowEx是在窗口列表中寻找与指定条件相符的第一个子窗口 ...

  6. iOS 横竖屏切换解决方案

    iOS要实现横竖屏切换很简单,不需要使用任何第三方,只需要实现几个方法就可以了. 1.设置系统支持横竖屏[General]->[Targets]-> [Deployment info]-& ...

  7. 自动生成AWR报告

    --自动生成AWR报告 -------------------2013/09/23   脚本代码:   #!/bin/bash   AWR_FORMAT=html NUM_DAYS=1   MAX_S ...

  8. Vue页面Demo

    为了学习了解Vue.js,试着写了一个demo,如下; 准备工作: 需要引入的js和css库有: 1.vue.js 主要是学习,所以引入了这个js库,实际运行时应该使用vue.min.js 2.axi ...

  9. 安装mvn,jdk,rocketmq

    附一个rocketmq各语言客户端仓库:https://github.com/apache/incubator-rocketmq-externals,我用go客户端,但是master分支的go没有pr ...

  10. 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装

      [MySQL]Linux下MySQL 5.5.5.6和5.7的RPM.二进制和源码安装 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后, ...