CCF-CSP题解 201609-4 交通规划
最小最短路径树。
\(dis[j]==dis[i]+w(i,j)\)时,从\(w(i,j')\)和\(w(i,j)\)考虑。——从0分到100分。
#include <bits/stdc++.h>
const int maxn = 10000;
const int maxm = 100000;
using namespace std;
int to[maxm * 2 + 10];
int w[maxm * 2 + 10];
int nex[maxm * 2 + 10];
int head[maxn + 10], cnt = 0;
void addEdge(int a, int b, int c)
{
    to[cnt] = b; w[cnt] = c;
    nex[cnt] = head[a]; head[a] = cnt++;
    to[cnt] = a; w[cnt] = c;
    nex[cnt] = head[b]; head[b] = cnt++;
}
int edgeVis[maxm + 10];
int dotVis[maxn + 10];
int dis[maxn + 10];
int edgePre[maxn + 10];
void spfa()
{
    memset(edgeVis, 0, sizeof(edgeVis));
    memset(dotVis, 0, sizeof(dotVis));
    memset(dis, 0x3f, sizeof(dis));
    memset(edgePre, -1, sizeof(edgePre));
    queue<int> q;
    dis[1] = 0;
    q.push(1);
    dotVis[1] = 1;
    while (!q.empty())
    {
        int x = q.front(); q.pop();
        dotVis[x] = 0;
        for (int i = head[x]; i != -1; i = nex[i])
        {
            int l = to[i];
            if (dis[l] > dis[x] + w[i])
            {
                dis[l] = dis[x] + w[i];
                if (edgePre[l] != -1)
                    edgeVis[edgePre[l]] = 0;
                edgePre[l] = i / 2;
                edgeVis[edgePre[l]] = 1;
                if (!dotVis[l])
                {
                    q.push(l);
                    dotVis[l] = 1;
                }
            }
            else if (dis[l] == dis[x] + w[i])
            {
                if (w[edgePre[l] * 2] > w[i])
                {
                    edgeVis[edgePre[l]] = 0;
                    edgePre[l] = i / 2;
                    edgeVis[edgePre[l]] = 1;
                }
            }
        }
    }
}
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    memset(head, -1, sizeof(head));
    for (int i = 1, a, b, c; i <= m; i++)
    {
        scanf("%d%d%d", &a, &b, &c);
        addEdge(a, b, c);
    }
    spfa();
    int ans = 0;
    for (int i = 0; i <= cnt - 1; i += 2)
    {
        if (edgeVis[i / 2])
        {
            ans += w[i];
        }
    }
    printf("%d\n", ans);
    return 0;
}
CCF-CSP题解 201609-4 交通规划的更多相关文章
- CCF CSP 201609-4 交通规划
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-4 交通规划 问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自 ... 
- CCF 201609-4 交通规划
		问题描述 试题编号: 201609-4 试题名称: 交通规划 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家 ... 
- CCF 交通规划(Dijkstra+优先队列)
		交通规划 问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成 ... 
- CCF CSP 201509-4 高速公路
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-4 高速公路 问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在 ... 
- CCF CSP 201703-3 Markdown
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ... 
- CCF CSP 201312-3 最大的矩形
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ... 
- CCF CSP 201609-3 炉石传说
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ... 
- CCF CSP 201403-3 命令行选项
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ... 
- CCF CSP 201709-4 通信网络
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ... 
- CCF CSP 201409-3 字符串匹配
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ... 
随机推荐
- vue中router跳转本页刷新
			问题: 导航栏的地址发生改变但是页面却不刷新 (用vue-router路由到当前页面,页面是不进行刷新的)解决: 1.); 2.location.reload() ... 
- 数据类型-Java基础一-初学者笔记
			初学者笔记 1.Java中的两种类型 在java源代码中,每个变量都必须声明一种类型(type). 有两种类型:primitive type和reference type.引用类型引用对象(ref ... 
- 2019-10-2,html作业,简历源码
			<html> <head> <title>简历作业</title> </head> <body bgcolor=#cccccc> ... 
- linuxRAID(软)
			RAID是一种存储机制,英文全名为“RedundantArrays of Inexpensive Disks”,即容错廉价磁盘阵列.RAID可以通过一些技术(硬件或者软件)将多个磁盘整合起来,不仅是一 ... 
- 题解-洛谷P2010-回文日期
			原题链接: https://www.luogu.org/problem/P2010 题目简述: 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后22位代表日期.显然:一个 ... 
- 邮箱基础协议:SMTP/POP3/IMAP
			目录 电子邮件的组成:信封.首部和正文 邮件基础协议 SMTP SMTP 指令 使用 Telnet 模拟 SMTP 发送邮件 POP3 POP3 的生命周期 IMAP 标志消息属性 状态和流程图 IM ... 
- IDEA 自定义代码块
			使用快捷键(ctrl+alt+s)找到:从idea的菜单File->Settings->Editor->Live Templates 先添加Template Group,然后添加Li ... 
- JavaScript实现返回顶部效果
			仿淘宝回到顶部效果 需求:当滚动条到一定位置时侧边栏固定在某个位置,再往下滑动到某一位置时显示回到顶部按钮.点击按钮后页面会动态滑到顶部,速度由快到慢向上滑. 思路: 1.页面加载完毕才能执行js代码 ... 
- uni-app中使用scroll-view滚到底部时多次触发scrolltolower事件
			一.前言.scroll-view基本属性: 前言: 前段时间使用scroll-view可滚动视图区域容器来做多个不同内容的展示(在我这个页面中同时使用了三个scroll-view做数据展示),因为这几 ... 
- Swoole 是 PHP 中的 Node.js?
			一想到那些可以使用 Node 的同事,一些 PHP 开发者的脸都嫉妒绿了.异步 Node 系统可以在不同协议间共享代码库,并在代码之外提供服务.这真的想让一个人转 Node 开发.实际上 PHP 中也 ... 
