【链接】点击打开链接


【题意】


小 T 被放到了一个迷宫之中,这个迷宫由 n 个节点构成,两个节点之间可能存在多条无 向边,小 T 的起点为 1 号节点,终点为 n 号节点。有 m 条无向边,对于每一条无向边,存在 一个喋血值(∈N*,且≤100),即走过这条边的花费。另外,还有 k 个节点上有治疗药,即 若小 T 走到这个节点上时(不妨称这个点为治愈点),他身上所累积的喋血值会归零。小 T 希望以最小的喋血值走完迷宫。
1<=n<=5000,1<=k<=n,1<=m<=25000.


【题解】


考虑走到了治愈点.
则肯定喋血值变成0了。
之前走多少的喋血值都无所谓了。
于是,考虑这个人走的最后一个治愈点是哪个?
枚举即可。
然后求出治愈点到n的最短路。
或者,没有经过治愈点,则输出一条从1到n的最短路。

【错的次数】


0

【反思】


在这了写反思

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 5e3, INF = 0x3f3f3f3f; int n, m, k, dis[N+10],f[N+10];
vector <pair<int,int> > G[N + 10];
queue <int> dl;
bool inq[N + 10]; int ff(int x) {
    if (f[x] == x) return x;
    else
        return f[x] = ff(f[x]);
} int main() {
    //freopen("F:\\rush.txt", "r", stdin);
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++) f[i] = i;
    for (int i = 1; i <= m; i++) {
        int x, y, z;
        cin >> x >> y >> z;
        if (ff(x) != ff(y)) f[ff(x)] = ff(y);
        G[x].push_back(make_pair(y, z)), G[y].push_back(make_pair(x, z));
    }
    if (ff(1) != ff(n)) return cout << "Oh no!"  << endl, 0;
    memset(dis, INF, sizeof dis);
    dis[n] = 0, inq[n] = 1;
    dl.push(n);
    while (!dl.empty()) {
        int x = dl.front(); dl.pop();
        inq[x] = false;
        for (auto temp : G[x]) {
            if (dis[temp.first] > dis[x] + temp.second) {
                dis[temp.first] = dis[x] + temp.second;
                if (!inq[temp.first]) {
                    inq[temp.first] = true;
                    dl.push(temp.first);
                }
            }
        }
    }
    int ans = dis[1];
    for (int i = 1; i <= k; i++) {
        int x;
        cin >> x;
        if (ff(x) == ff(1) && ff(x) == ff(n)) ans = min(ans, dis[x]);
    }
    cout << ans << endl;
    return 0;
}

【】maze的更多相关文章

  1. 【南京邮电】maze 迷宫解法

    [南京邮电]maze 迷宫解法 题目来源:南京邮电大学网络攻防训练平台. 题目下载地址:https://pan.baidu.com/s/1i5gLzIt (密码rijss) 0x0 初步分析 题目中给 ...

  2. 【&】位与运算符【|】位或运算符之权限控制算法

    [&]位与运算符: 按位与运算符"&"是双目运算符. 其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数 ...

  3. 存储过程 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

    use TTgoif exists (select * from sysobjects where name='Tonge')drop table Tongecreate table Tonge( I ...

  4. 普通方式 分页【NOT IN】和【>】效率大PK 千万级别数据测试结果

    首现创建一张表,然后插入1000+万条数据,接下来进行测试. use TTgoif exists (select * from sysobjects where name='Tonge')drop t ...

  5. java byte【】数组与文件读写(增加新功能)

    今天在测试直接写的文章: java byte[]数组与文件读写 时,想调用FileHelper类对字节数组以追加的方式写文件,结果无论怎样竟然数据录入不全,重新看了下文件的追加模式,提供了两种方式: ...

  6. Spring 当 @PathVariable 遇上 【. # /】等特殊字符

    @PathVariable注解应该不是新鲜东西了Spring3.0就开始有了 URL中通过加占位符把参数传向后台 举个栗子,如下比较要说的内容比较简单就大概齐的写一下 画面侧 $.ajax({ typ ...

  7. 【php正则】php正则匹配UTF-8格式的中文汉字 和 【,】【,】【。】等符号

    1.php正则匹配UTF-8格式的中文汉字 和 [,][,][.]等符号 if (preg_match_all("/([\x{4e00}-\x{9fa5}]+((,)?)+((,)?)+(( ...

  8. 公式中表达单个双引号【"】和空值【""】的方法及说明

    http://club.excelhome.net/thread-661904-1-1.html 有人问为什么不用三个双引号"""来表示单个双引号["]呢,如果 ...

  9. ubuntu fcitx google 输入法打不出中括号【】

    编辑/usr/share/fcitx/data/punc.mb.zh_CN, 将 [ · ] 「 」 这部分改成自己习惯的: [  [ ]  ] 保存后,重启一下fcitx就OK了.

随机推荐

  1. Bag标签之中的一个行代码实行中文分词实例3

    例3: 分词(返回一个书包.以_0._1._2 ...取出分好的词) <bag id=words act=2words>我喜欢黄色高领T恤衫</bag> 注意没有name属性 ...

  2. hdu 1171 Big Event in HDU(01背包)

    代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; in ...

  3. ios代理的使用,正向传值,逆向传值

    #import <UIKit/UIKit.h> #import "SubViewController.h" @interface ViewController : UI ...

  4. android framework 01

    .(由下向上启动),Uboot引导内核(linux Kernel)启动,把内核从flash放到内存中,引导内核启动.内核是系统的核心,负责进程的管理内存的管理网络的管理.内核(Linux Kenel) ...

  5. Python day4知识回顾

    # -*- coding: utf_8 _*_# Author:Vi#字典是无序的 info = { 'student001':"DIO", 'student002':" ...

  6. 今日SGU 5.4

    SGU 127 题意:给你n个数字,和m,k,问你有多少个数字的m次幂可以被k整除 收获:快速幂 #include<bits/stdc++.h> #define de(x) cout< ...

  7. CODEVS——T1183 泥泞的道路

    时间限制: 1 s  空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解  查看运行结果 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到 ...

  8. Struts2+Spring+Hibernate step by step 06 整合Hibernate

    注:该系列教程.部分内容来自王健老师编写ssh整合开发教程 Hibernate是一款优秀的ORM(Object Relation Mapping-对象关系映射图)工具.与Struts.Spring项目 ...

  9. SpringMVC &amp; Struts2

    这两个框架可谓Java中的经典,Java开发必懂的框架,这两天在面试中又问道两者的异同.这里简单做了整理供大家參考交流. 概念:

  10. Service-监听手机来电

    public class MonitorPhone extends Activity { TelephonyManager tManager; @Override protected void onC ...