首页 > 其他分享 >hdu:Choose the best route(dijstra,虚设点)

hdu:Choose the best route(dijstra,虚设点)

时间:2023-01-06 19:12:04浏览次数:45  
标签:hdu int route cnt dijstra edge Kiki now dis

Problem Description
One day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at her friend’s home as soon as possible . Now give you a map of the city’s traffic route, and the stations which are near Kiki’s home so that she can take. You may suppose Kiki can change the bus at any station. Please find out the least time Kiki needs to spend. To make it easy, if the city have n bus stations ,the stations will been expressed as an integer 1,2,3…n.

Input
There are several test cases.
Each case begins with three integers n, m and s,(n<1000,m<20000,1=<s<=n) n stands for the number of bus stations in this city and m stands for the number of directed ways between bus stations .(Maybe there are several ways between two bus stations .) s stands for the bus station that near Kiki’s friend’s home.
Then follow m lines ,each line contains three integers p , q , t (0<t<=1000). means from station p to station q there is a way and it will costs t minutes .
Then a line with an integer w(0<w<n), means the number of stations Kiki can take at the beginning. Then follows w integers stands for these stations.

Output
The output contains one line for each data set : the least time Kiki needs to spend ,if it’s impossible to find such a route ,just output “-1”.


输入样例

5 8 5
1 2 2
1 5 3
1 3 4
2 4 7
2 5 6
2 3 5
3 5 1
4 5 1
2
2 3
4 3 4
1 2 3
1 3 4
2 3 2
1
1

输出样例

1
-1

单向建图
附ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10,M=2e4+10,INF=0x3f3f3f3f;
int head[M],dist[N],cnt;
bool vis[N];
struct _edge{
   int to,dis,next;
}edge[M];
struct node{
   int id,dis;
   friend bool operator < (const node T1,const node T2)
   {
       return T1.dis>T2.dis;
   }
};
void add_edge(int from,int to,int dis)
{
    edge[++cnt].to=to;
    edge[cnt].dis=dis;
    edge[cnt].next=head[from];
    head[from]=cnt;
}
int dij(int s)
{
    priority_queue<node> q;
    q.push(node {0,0});
    while(!q.empty())
    {
        node a=q.top();q.pop();
        int now=a.id;
        if(vis[now]) continue;
        vis[now]=1;
        for(int i=head[now];i!=-1;i=edge[i].next)
        {
            int j=edge[i].to;
            if(dist[now]+edge[i].dis<dist[j])
            {
                dist[j]=dist[now]+edge[i].dis;
                q.push(node {j,dist[j]});
            }
        }
    }
    if(dist[s]!=INF) return dist[s];
    return -1;
}
int main()
{
    int n,m,s,w;
    int a,b,c;
    while(scanf("%d%d%d",&n,&m,&s)==3)
    {
        memset(vis,0,sizeof(vis));
        memset(head,-1,sizeof(head));
        memset(edge,0,sizeof(edge));
        cnt=0;
        for(int i=1;i<=n;++i) dist[i]=INF;
        dist[0]=0;
        while(m--)
        {
            scanf("%d%d%d",&a,&b,&c);
            add_edge(a,b,c);
            //add_edge(b,a,c);
        }
        scanf("%d",&w);
        while(w--)
        {
            scanf("%d",&a);
            add_edge(0,a,0);
            //add_edge(a,0,0);
        }
        printf("%d\n",dij(s));
    }
}

 

 

标签:hdu,int,route,cnt,dijstra,edge,Kiki,now,dis
From: https://www.cnblogs.com/ruoye123456/p/17031387.html

相关文章

  • hdu:最短路(堆优化的dijkstra)
    ProblemDescription在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现......
  • hdu: 张煊的金箍棒(3)(树状数组的区间修改,区间查询)
    ProblemDescription张煊的金箍棒升级了!升级后的金箍棒是由N段相同长度的金属棒连接而成(最开始每段金属棒的价值都是1,从1到N编号);张煊作为金箍棒的主人,可以对金箍棒任意......
  • Vue-Router
    Rouer组件可以构造单页引用多页应用:mpa每一个页面都是一个html文件方便seo优化单页应用:spa知乎网站掘进百度移动端单页用于取决情况:1.用户群体比较......
  • vue-router
    vue:V2.5.2vue-router版本:V3.0.1//获取原型对象上的push函数constoriginalPush=VueRouter.prototype.push//修改原型对象中的push方法VueRouter.prototype.push=......
  • beforeRouterLeave this.$route.meta,keepALive=true ;第一次进入不生效,第二次进入生
    今天写业务代码的时候,页面缓存之后,清除缓存总不生效,具体代码如下:  我最后把beforeRouterLeave改成了BeforRouterEnter ,然后就生效了;很大的可能是因为,beforeRoute......
  • hdu:sort it(逆序对,离散化)
    ProblemDescription给定n(n<=100000)个正整数,希望对其从小到大排序,如果采用冒泡排序算法,请计算需要进行的交换次数。Input输入包含多组测试用例,每组用例由两行组成:第一行......
  • react Router 学习
     功能:1.进入项目后的默认路径是home,默认展示首页模块2.点击路由,切换子组件3.点击文章路由,根据传值不同进入三级详情路由,同时二级路由不显示4.点击返回首页,跳转到首页 安装......
  • ngnix conf配置 vue router
    #usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx......
  • HDU 6439 2018CCPC网络赛 Congruence equationI(杜教筛 + 莫比乌斯反演 + 伯努利数)
      大致题意:给你一个长度为k的序列a。对于序列c,当  时,;当时,取[0,m)中任意一个数字。令  表示满足  的序列c的方案数。现在让你求 。          ......
  • HDU 6801 Game on a Circle 题解 (推式子,多项式)
    题目链接首先注意到我们对这个环的扫描是一轮一轮进行的,每轮都会从左到右对每个没被删除的元素以p的概率删除。如果我们能对每个\(t(t\in[0,\infin],t是整数)和i\)求出c......