1.最短路(short.pas/cpp/in/out)

问题描述:

小 C 终于被小 X 感动了,于是决定与他看电影,然而小 X 距离电影院非常远,现在假设

每条道路需要花费小 X 的时间为 1,由于有数以万计的好朋友沿路祝贺,导致小 X 在通过某

些路不得不耗费 1 的时间来和他们聊天,尽管他希望尽早见到小 C,所以他希望找到一条最

快时间到达电影院的路。

一开始小 X 在 1 号点,共有 N 个点,M 条路,电影院为 T 号点。

输入:

第一行 3 个正整数,分别为 n,m 和 t。

以下 m 行,每行 3 个数,表示连接的编号以及权值。

(注意,可能会有重边)

输出:

一行一个数,表示 1 到 t 的最短路。

样例输入:

10 12 6
3 9 2
6 9 2
6 2 1
3 1 1
1 9 2
2 8 2
7 10 1
7 2 1
10 0 1
8 1 1
1 5 2
3 7 2

样例输出:

4

数据范围:

对于 30%的数据:n<=10,m<=20;

对于 60%的数据:n<=1 000,m<=20 000;

对于 100%的数据:n<=5 000 000,m<=10 000 000。


时空限制

注意下这道题时间限制:\(2.5ms\) 空间限制:\(1024MB\) 好大呀

思路

把因为边权只有可能是1和2,所以我们可以把边权为2的点拆成两条边,然后广搜~

最大的测试点还是达到了1.3+s QAQ 无能为力嘤嘤嘤~

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 10000005
#define MAXM 20000005
#define INF 0x7f7f7f7f int N, M, T;
int hd[MAXN], to[MAXM << 1], nxt[MAXM << 1], tot, dis[MAXN];
int Q[MAXN], ph(1), pt(0);
int x, y, z;
char B[150<<20], *S = B; int read(){
int ans(0);
while( !isdigit(*S) ) S++;
while( isdigit(*S) ) ans = ans * 10 + ( (*S) ^ '0' ), S++;
return ans;
} void Add( int x, int y ){
nxt[++tot] = hd[x]; to[tot] = y; hd[x] = tot;
nxt[++tot] = hd[y]; to[tot] = x; hd[y] = tot;
} int main(){
freopen( "short.in", "r", stdin );
freopen( "short.out", "w", stdout );
fread( B, 1, 150 << 20, stdin );
N = read(); M = read(); T = read();
for ( int i = 1; i <= M; ++i ){
x = read(); y = read(); z = read();
if ( z & 1 ) Add( x, y );
else Add( x, ++N ), Add( y, N );
}
Q[++pt] = 1;
memset( dis, -1, sizeof dis ); dis[1] = 0;
while( pt >= ph ){
int t(Q[ph++]);
for ( int i = hd[t]; i; i = nxt[i] )
if ( dis[to[i]] < 0 ){
dis[to[i]] = dis[t] + 1, Q[++pt] = to[i];
if ( t == T ) break;
}
}
printf( "%d\n", dis[T] );
return 0;
}

「2018-12-02模拟赛」T1 最短路 解题报告的更多相关文章

  1. 「2018-11-05模拟赛」T5 传送机 解题报告

    5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...

  2. 「2018-12-02模拟赛」T3 约束排列 解题报告

    3.约束排列(place.pas/cpp/in/out) 问题描述: 给出 n 个互不相同的小写字母,表示出现的字符类型,以及 k 个约束关系: .....,表示 ai 必须出现在 bi 前面(ai, ...

  3. Solution -「牛客 NOIP 模拟赛」打拳

    \(\mathcal{Description}\)   现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...

  4. [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)

    题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...

  5. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  6. #10471. 「2020-10-02 提高模拟赛」灌溉 (water)

    题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...

  7. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  8. 2018.12.02 Socket编程之初识Socket

    Socket编程主要分为TCP/UDP/SCTP三种,每一种都有各自的优点,所以会根据实际情况决定选用何种Socket,今天开始我将会逐步学习Socket编程,并将学习过程记录于此. 今天学习的是TC ...

  9. 「NOIP模拟赛」数位和乘积(dp,高精)

    统计方案数,要么组合数,要么递推(dp)了. 这是有模拟赛历史以来爆炸最狠的一次 T1写了正解,也想到开long long,但是开错了地方然后数组开大了结果100->0 T3看错题本来简单模拟又 ...

随机推荐

  1. @codeforces - 414E@ Mashmokh's Designed Problem

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵 n 个点的树,每个点的儿子是有序的. 现给定 m 次操 ...

  2. IOS开发之UISearchBar自定义外观

      MySearchBar.h如下: @interface MySearchBar : UISearchBar - (void)layoutSubviews; @end MySearchBar.m如下 ...

  3. linux扫盲之CPU模式

    相信研究linux的大大都知道linux有实模式.保护模式.虚拟模式三种. 不多说,拷贝黏贴!  80386开始,cpu有三种工作方式:实模式,保护模式和虚拟8086模式.只有在刚刚启动的时候是rea ...

  4. 仿IOS效果-带弹簧动画的ListView

    背景介绍 最近项目打算做一个界面,类似于dayone首页的界面效果,dayone 是一款付费应用,目前只有IOS端.作为一个资深懒惰的程序员,奉行的宗旨是绝对不重复造一个轮子.于是乎,去网上找一大堆开 ...

  5. day3_python之函数基础知识

    一 .为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维 ...

  6. hdu 4063 Aircraft (Geometry + SP)

    Problem - 4063 几何加简单最短路. 题意是给出若干圆的圆心以及半径,求出从给出的起点到终点的最短路径的长度,可以移动的区域是圆覆盖到的任意一个位置. 做法是这样的,对圆两两求交点,用这些 ...

  7. pytorch中squeeze()和unsqueeze()函数介绍

    一.unsqueeze()函数 1. 首先初始化一个a 可以看出a的维度为(2,3) 2. 在第二维增加一个维度,使其维度变为(2,1,3) 可以看出a的维度已经变为(2,1,3)了,同样如果需要在倒 ...

  8. 2018-9-1-win2d-画出好看的图形

    title author date CreateTime categories win2d 画出好看的图形 lindexi 2018-09-01 16:25:40 +0800 2018-2-13 17 ...

  9. 【codeforces 789B】Masha and geometric depression

    [题目链接]:http://codeforces.com/contest/789/problem/B [题意] 让你一个一个地写出等比数列的每一项 (注意是一个一个地写出); 有m个数字不能写; 且数 ...

  10. 新手该如何学习JavaScript ?

    JavaScript入门 - 01 准备工作 在正式的学习JavaScript之前,我们先来学习一些小工具,帮助我们更好的学习和理解后面的内容. js代码位置 首先是如何编写JavaScript代码, ...