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

思路:执行起始点次的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. 52. leetcode 96. Unique Binary Search Trees

    96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) tha ...

  2. nessus重置密码

    许久不用的nessus密码居然忘记了,查了下: cmd下进入到nessus的安装目录 提升为管理员,登录系统 如果想用之前的账号,可以直接在系统内重置密码.

  3. Linux Shell 1 - Print from terminal

    Two ways to print info from terminal - echo & printf - Echo a. Exclamation mark is supported in ...

  4. Java中Scanner的输入流的关闭问题

    为什么Scanner in语句只能关闭一次,且对于其他任何Scanner输入流也关闭? 代码如图 import java.util.Scanner; public class ScannerTest  ...

  5. 53. Maximum Subarray【leetcode】

    53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...

  6. 【head first python】1.初识python 人人都爱列表

    #coding:utf-8 #创建简单的python列表 movies = ["The Holy Grail", "The Life of Brain", &q ...

  7. 01迷宫 洛谷 p1141

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  8. SNS社交系统“ThinkSNS V4.6”活动应用功能详解及应用场景举例

    sns社交系统ThinkSNS目前拥有功能:朋友圈(微博).微吧(论坛).频道.积分商城.IM即时聊天.直播.问答.活动.资讯(CMS).商城.广场.找人.搜索.评论.点赞.转发.分享.话题.积分.充 ...

  9. 巧妙利用JS中的自定义函数——化繁为简,提高效率

    利用自定义函数编写年月日时间表: (复杂写法)如下: <body>                <select id="year" size="1&q ...

  10. U3D 控件

    1.普通控件 GUI.Label() GUI.Button()等方法添加控件 bool clicked = GUI.Button() 当按钮单击时,返回true string ss = GUI.Tex ...