hdu-3790最短路刷题
title: hdu-3790最短路刷题
date: 2018-10-20 14:50:31
tags:
- acm
 - 刷题
categories: - ACM-最短路
 
概述
一道最短路的水题,,,尽量不看以前的代码打出来,,,熟悉一下dijkstra的格式和链式前向星的写法,,,,
虽然是水题,,,但是一开始没考虑取费用最短的wa了一发,,,,QAQ
分析
链式前向星存图,,再加一个数组保存源点到每个点的费用cst[maxm],,,注意取最少的费用
代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;
const int maxn = 1e3 + 10;
const int maxm = 1e5 + 10;
const int inf = 0x3f3f3f3f;
int head[maxm << 1];
bool vis[maxn];
int dis[maxm];
int cst[maxm];
int cnt;
int n , m;
struct edge
{
    int to;
    int w;
    int c;
    int last;
}edge[maxm << 1];
void addedge(int u , int v , int w , int c)
{
    edge[cnt].to = v;
    edge[cnt].w = w;
    edge[cnt].c = c;
    edge[cnt].last = head[u];
    head[u] = cnt++;
}
struct node
{
    int u;
    int w;
    node(int _u , int _w):u(_u) , w(_w){}
    bool operator < (const node &res) const
    {
        return w > res.w;
    }
};
void dijkstra(int n , int s)
{
    for(int i = 1; i <= n; ++i)
        dis[i] = (i == s) ? 0 : inf;
    memset(cst , inf , sizeof cst);cst[s] = 0;
    memset(vis , false , sizeof vis);
    priority_queue<node> q;
    while(!q.empty())   q.pop();
    q.push(node(s , 0));
    while(!q.empty())
    {
        node x = q.top();q.pop();
        int u = x.u;
        if(vis[u])  continue;
        vis[u] = true;
        for(int i = head[u] ; ~i; i = edge[i].last)
        {
            int to = edge[i].to;
            int w = edge[i].w;
            int c = edge[i].c;
            if(!vis[to] && dis[u] + w <= dis[to])
            {
                dis[to] = dis[u] + w;
                //if(cst[u] + c < cst[to])
                    cst[to] = cst[u] + c;
                q.push(node(to , dis[to]));
            }
        }
    }
}
int main()
{
    while(scanf("%d%d" , &n , &m) && n && m)
    {
        cnt = 0;
        memset(head , -1 , sizeof head);
        int u , v , w , c;
        for(int i = 1; i <= m; ++i)
        {
            scanf("%d%d%d%d" , &u , &v , &w , &c);
            addedge(u , v , w , c);
            addedge(v , u , w , c);
        }
        int s , t;
        scanf("%d%d" , &s , &t);
        dijkstra(n , s);
        printf("%d %d\n" , dis[t] , cst[t]);
    }
}
//最短路相等时注意取费用最短的
//
//5 7
//1 2 5 5
//2 3 4 5
//1 3 4 6
//3 4 2 2
//3 5 4 7
//4 5 2 4
//1 3 4 4
//1 5
//8 10
差不多记住了的dijkatra的代码,,,继续继续
(end)
hdu-3790最短路刷题的更多相关文章
- HDU 2544 最短路(模板题)
		
求1到N的最短路径,模板题,以1为源点,用dijkstra算法(可以用优先级队列优化) #include <iostream> #include <algorithm> #in ...
 - hdu 2066 最短路水题
		
题意:给出多个可选择的起始点和终点,求最短路 思路:执行起始点次的spfa即可 代码: #include<iostream> #include<cstdio> #include ...
 - HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)
		
前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...
 - 手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)
		
转载注明原地址:http://blog.csdn.net/nk_test/article/details/49497017 少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯 ...
 - UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
		
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
 - 教你用python写:HDU刷题神器
		
声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...
 - HDU 5521.Meeting 最短路模板题
		
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
 - HDU 2544 最短路(模板题——Floyd算法)
		
题目: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你 ...
 - 【刷题】HDU 2222 Keywords Search
		
Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...
 
随机推荐
- Spring3.2 Contorller单元测试参数问题: java.lang.NoSuchMethodException
			
使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerA ...
 - 【leetcode 简单】 第五十九题 同构字符串
			
给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一 ...
 - 【算法学习】manacher
			
manacher太水了. 这篇blog不能称作算法学习,因为根本没有介绍…… 就贴个模板,太简单了…… #include<cstdio> #include<cstring> # ...
 - 使用netcat的正向 / 反向shell
			
reverse shell bind shell reverse shell描述图: 在此示例中,目标使用端口4444反向连接攻击主机.-e选项将Bash shell发回攻击主机.请注意,我们也可以在 ...
 - 你需要知道的12个Git高级命令【转】
			
转自:http://www.linuxidc.com/Linux/2016-01/128024.htm 众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git, ...
 - aarch64_c1
			
CBFlib-0.9.5.15-3.fc26.aarch64.rpm 2017-02-06 06:55 393K fedora Mirroring Project CBFlib-devel-0.9.5 ...
 - React-Native 之 环境配置和简单使用
			
# 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会 ...
 - 九、springboot整合redis二之缓冲配置
			
1.创建Cache配置类 @Configuration @EnableCaching public class RedisCacheConfig extends CachingConfigurerSu ...
 - [HBase]mem store flusher 流程
 - 缓存数据库-redis安装和配置
			
一:redis安装 python操作redis分为两部分,一为安装redis程序 二是安装支持python操作redis的模块 1)安装redis redis 官方网站:http://www.redi ...