[AHOI2002]哈利·波特与魔法石
这道题比较简单,就是一个最短路(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]哈利·波特与魔法石相关推荐
- 洛谷 P2559 [AHOI2002]哈利·波特与魔法石
P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . -. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...
- 洛谷——P2559 [AHOI2002]哈利·波特与魔法石
P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . -. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...
- fjnu 1441 哈利.波特与魔法石
Description 大年初三的那个晚上,小可可去电影院看了<哈利?波特与魔法石>,回到家坐在椅子上不一会儿就睡着了,并且梦见自己成了哈利?波特驰骋在充满了正义与邪恶的宇宙中执著地为了正 ...
- 电影推荐之《 哈利·波特与魔法石》 隐私策略(Privacy policy)
1.隐私政策涵盖您对本应用的使用. 2.电影推荐之< 哈利·波特与魔法石>不会收集.存储.分享您的任何个人信息或者与您的设备相关的信息.我们不会收集任何统计数据和分析数据,也不会跟踪用户的 ...
- 【AHOI2002】哈利●波特与魔法石
题目背景 AHOI2002 DAY2 T2 题目描述 某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵.该星球上有七种不同的地形,依次分别是:石子路.森林.草地.山地.雪地.沼泽和 ...
- 哈里波特与魔法石pdf_哈里·罗伯茨(CSS)CSS框架的命运与失败
哈里波特与魔法石pdf Harry Roberts helps teams all over the world to build better front ends. Craig spoke to ...
- 0924-安徽省选 2002-哈利●波特与魔法石
题目描述 某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵.该星球上有七种不同的地形,依次分别是:石子路.森林.草地.山地.雪地.沼泽和沙漠.分别用数字 1-7 来表示,穿越这七种 ...
- 哈利·波特与死亡圣器(下)
哈利进入与伏地魔意识连通的幻境,找到了一些魂器,但也让伏地魔发觉了他们的行动.哈利又一次进入幻境后推断出伏地魔的居所,三人来到了此地.他们看到伏地魔命令毒蛇除掉斯内普,以把长老魔杖的魔力传给自己.弥留 ...
- 《哈利·波特与死亡圣器(上)》BD中英双字无水印高清+1080P 720P蓝光地址
◎译 名 哈利·波特与死亡圣器(上)/哈利波特:死神的圣物1(港/台)/哈利·波特与死圣(上)/哈利·波特7 ◎片 名 Harry Potter and the Deathly Hallows Par ...
最新文章
- sklearn数据预处理-scale
- 计算机系统性错误,《深入理解计算机系统-异常》
- JavaScript Ajax
- 763 划分字母区间
- 常见的Activity Action Intent常量
- Javascript的防抖和节流、VUE的防抖和节流
- 如何使用动软代码生成器连接oracle生成数据库设计文档
- VMware Workstation for Windows 历史版本
- centos 6 python django mysql_CentOS 6.5中部署django+uwsgi+nginx+mysql项目
- 怎么在合同谈判,计划和执行阶段分别进行范围管理
- 计算机应用职业的外部环境,完整的职业生涯规划书范文
- zapewnia stale poprawiając relacje związane
- 1.网络安全之windows系统知识
- android app自动拍照6,6款手机拍照处理软件,大片生成,值得点赞收藏,不快来看一下?...
- 计算机论文答辩注意哪些问题,计算机毕业设计答辩(问题+技巧)
- CSMA/CA基本原理
- 反对将AI用于“自主武器”公开信:Stephen Hawking、Elon Musk,以及多位人工智能专家署名...
- 阿里云虚拟主机,免费用
- 使用keil软件创建一个STM32工程
- matlab 读excel表格文件 产生多个不同的.coe文件