这道题比较简单,就是一个最短路(SSSP)。数据水,用Floyd即可AC。这里用了Dijkstra。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 #include <queue>
  6
  7 using namespace std;
  8
  9 #define re register
 10 #define rep(i, a, b) for (re int i = a; i <= b; ++i)
 11 #define repd(i, a, b) for (re int i = a; i >= b; --i)
 12 #define maxx(a, b) a = max(a, b);
 13 #define minn(a, b) a = min(a, b);
 14 #define LL long long
 15 #define inf (1 << 30)
 16
 17 inline int read() {
 18     int w = 0, f = 1; char c = getchar();
 19     while (!isdigit(c)) f = c == '-' ? -1 : f, c = getchar();
 20     while (isdigit(c)) w = (w << 3) + (w << 1) + (c ^ '0'), c = getchar();
 21     return w * f;
 22 }
 23
 24 const int maxn = 100 + 5, maxm = 1e4 + 5;
 25
 26 struct Edge {
 27     int u, v, w, pre;
 28 };
 29
 30 struct Node {
 31     int u, d;
 32     bool operator < (const Node &rhs) const {
 33         return d > rhs.d;
 34     }
 35 };
 36
 37 int way[8] = {0, 2, 6, 4, 8, 6, 10, 14};
 38
 39 priority_queue<Node> Q;
 40
 41 struct Graph {
 42 #define iter(i, u) for (re int i = G[u]; i; i = edges[i].pre)
 43     Edge edges[maxm << 1];
 44     int n, m;
 45     int G[maxn];
 46     int dis[maxn], vis[maxn];
 47     void init(int n) {
 48         this->n = n;
 49         m = 0;
 50         memset(G, 0, sizeof(G));
 51     }
 52     void AddEdge(int u, int v, int w) {
 53         edges[++m] = (Edge){u, v, way[w], G[u]};
 54         G[u] = m;
 55         edges[++m] = (Edge){v, u, way[w], G[v]};
 56         G[v] = m;
 57     }
 58     void dijkstra(int s) {
 59         memset(vis, 0, sizeof(vis));
 60         memset(dis, 0x3f, sizeof(dis));
 61         dis[s] = 0;
 62         Q.push((Node){s, 0});
 63         while (!Q.empty()) {
 64             int u = Q.top().u; Q.pop();
 65             if (vis[u]) continue;
 66             vis[u] = 1;
 67             iter(i, u) {
 68                 Edge &e = edges[i];
 69                 if (dis[u] + e.w < dis[e.v]) {
 70                     dis[e.v] = dis[u] + e.w;
 71                     Q.push((Node){e.v, dis[e.v]});
 72                 }
 73             }
 74         }
 75     }
 76 } G;
 77
 78 int s, t, m;
 79
 80 int main() {
 81     freopen("ques.in", "r", stdin);
 82     freopen("ques.out", "w", stdout);
 83
 84     rep(i, 1, 7)
 85         if (read()) way[i] >>= 1;
 86
 87     s = read(), t = read();
 88
 89     G.init(100);
 90
 91     m = read();
 92
 93     rep(i, 1, m) {
 94         int u = read(), v = read(), w = read();
 95         G.AddEdge(u, v, w);
 96     }
 97
 98     G.dijkstra(s);
 99
100     printf("%d", G.dis[t]);
101
102     return 0;
103 }

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>
using namespace std;
#define re register#define rep(i, a, b) for (re int i = a; i <= b; ++i)#define repd(i, a, b) for (re int i = a; i >= b; --i)#define maxx(a, b) a = max(a, b);#define minn(a, b) a = min(a, b);#define LL long long#define inf (1 << 30)
inline int read() {int w = 0, f = 1; char c = getchar();while (!isdigit(c)) f = c == '-' ? -1 : f, c = getchar();while (isdigit(c)) w = (w << 3) + (w << 1) + (c ^ '0'), c = getchar();return w * f;}
const int maxn = 100 + 5, maxm = 1e4 + 5;
struct Edge {int u, v, w, pre;};
struct Node {int u, d;bool operator < (const Node &rhs) const {return d > rhs.d;}};
int way[8] = {0, 2, 6, 4, 8, 6, 10, 14};

priority_queue<Node> Q;
struct Graph {#define iter(i, u) for (re int i = G[u]; i; i = edges[i].pre)Edge edges[maxm << 1];int n, m;int G[maxn];int dis[maxn], vis[maxn];void init(int n) {this->n = n;m = 0;memset(G, 0, sizeof(G));}void AddEdge(int u, int v, int w) {edges[++m] = (Edge){u, v, way[w], G[u]};G[u] = m;edges[++m] = (Edge){v, u, way[w], G[v]};G[v] = m;}void dijkstra(int s) {memset(vis, 0, sizeof(vis));memset(dis, 0x3f, sizeof(dis));dis[s] = 0;Q.push((Node){s, 0});while (!Q.empty()) {int u = Q.top().u; Q.pop();if (vis[u]) continue;vis[u] = 1;iter(i, u) {Edge &e = edges[i];if (dis[u] + e.w < dis[e.v]) {dis[e.v] = dis[u] + e.w;Q.push((Node){e.v, dis[e.v]});}}}}} G;
int s, t, m;
int main() {freopen("ques.in", "r", stdin);freopen("ques.out", "w", stdout);
rep(i, 1, 7) if (read()) way[i] >>= 1;
s = read(), t = read();
G.init(100);
m = read();
rep(i, 1, m) {int u = read(), v = read(), w = read();G.AddEdge(u, v, w);}
G.dijkstra(s);
printf("%d", G.dis[t]);
return 0;}

转载于:https://www.cnblogs.com/ac-evil/p/10309035.html

[AHOI2002]哈利·波特与魔法石相关推荐

  1. 洛谷 P2559 [AHOI2002]哈利·波特与魔法石

    P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . -. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...

  2. 洛谷——P2559 [AHOI2002]哈利·波特与魔法石

    P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . -. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...

  3. fjnu 1441 哈利.波特与魔法石

    Description 大年初三的那个晚上,小可可去电影院看了<哈利?波特与魔法石>,回到家坐在椅子上不一会儿就睡着了,并且梦见自己成了哈利?波特驰骋在充满了正义与邪恶的宇宙中执著地为了正 ...

  4. 电影推荐之《 哈利·波特与魔法石》 隐私策略(Privacy policy)

    1.隐私政策涵盖您对本应用的使用. 2.电影推荐之< 哈利·波特与魔法石>不会收集.存储.分享您的任何个人信息或者与您的设备相关的信息.我们不会收集任何统计数据和分析数据,也不会跟踪用户的 ...

  5. 【AHOI2002】哈利●波特与魔法石

    题目背景 AHOI2002 DAY2 T2 题目描述 某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵.该星球上有七种不同的地形,依次分别是:石子路.森林.草地.山地.雪地.沼泽和 ...

  6. 哈里波特与魔法石pdf_哈里·罗伯茨(CSS)CSS框架的命运与失败

    哈里波特与魔法石pdf Harry Roberts helps teams all over the world to build better front ends. Craig spoke to ...

  7. 0924-安徽省选 2002-哈利●波特与魔法石

    题目描述 某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵.该星球上有七种不同的地形,依次分别是:石子路.森林.草地.山地.雪地.沼泽和沙漠.分别用数字 1-7 来表示,穿越这七种 ...

  8. 哈利·波特与死亡圣器(下)

    哈利进入与伏地魔意识连通的幻境,找到了一些魂器,但也让伏地魔发觉了他们的行动.哈利又一次进入幻境后推断出伏地魔的居所,三人来到了此地.他们看到伏地魔命令毒蛇除掉斯内普,以把长老魔杖的魔力传给自己.弥留 ...

  9. 《哈利·波特与死亡圣器(上)》BD中英双字无水印高清+1080P 720P蓝光地址

    ◎译 名 哈利·波特与死亡圣器(上)/哈利波特:死神的圣物1(港/台)/哈利·波特与死圣(上)/哈利·波特7 ◎片 名 Harry Potter and the Deathly Hallows Par ...

最新文章

  1. sklearn数据预处理-scale
  2. 计算机系统性错误,《深入理解计算机系统-异常》
  3. JavaScript Ajax
  4. 763 划分字母区间
  5. 常见的Activity Action Intent常量
  6. Javascript的防抖和节流、VUE的防抖和节流
  7. 如何使用动软代码生成器连接oracle生成数据库设计文档
  8. VMware Workstation for Windows 历史版本
  9. centos 6 python django mysql_CentOS 6.5中部署django+uwsgi+nginx+mysql项目
  10. 怎么在合同谈判,计划和执行阶段分别进行范围管理
  11. 计算机应用职业的外部环境,完整的职业生涯规划书范文
  12. zapewnia stale poprawiając relacje związane
  13. 1.网络安全之windows系统知识
  14. android app自动拍照6,6款手机拍照处理软件,大片生成,值得点赞收藏,不快来看一下?...
  15. 计算机论文答辩注意哪些问题,计算机毕业设计答辩(问题+技巧)
  16. CSMA/CA基本原理
  17. 反对将AI用于“自主武器”公开信:Stephen Hawking、Elon Musk,以及多位人工智能专家署名...
  18. 阿里云虚拟主机,免费用
  19. 使用keil软件创建一个STM32工程
  20. matlab 读excel表格文件 产生多个不同的.coe文件

热门文章

  1. 基于NS2的AODV协议的修改与仿真的实现
  2. 使用idea接受参数
  3. 2017第23届河北(石家庄)国际医疗器械展览会会刊(参展商名录)
  4. handbook of CP 10.2 Definitions 翻译
  5. Erasing and Winning UVA - 11491 解题报告
  6. 2020.8.8【算协集训】[第4次积分赛]
  7. 想要踏入测试门这些软件测试基础知识必须闹记在心
  8. ECMA及ecma5下新增的数组
  9. web网页第三方账号授权登录
  10. uboot成功移植到STM32F103ZET6(一)