题目大意:有$n(n\leqslant10^4)$个点,$m(m\leqslant10^5)$条边的无向图,每个点有一个属性$A/B$,要求$|cnt_A-cnt_B|\leqslant k(k\leqslant10)$,问$S\to T$最短路径

题解:把每个点拆成$2k+1$个点,分别标号为$[-k,k]$,表示到这$cnt_A-cnt_B$的值,跑最短路即可。

卡点:各种地方没有把$n$改成$n(2k+1)$

C++ Code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define maxn (10010 * 21)
#define maxm (100010 * 21)int head[maxn], cnt;
struct Edge {int to, nxt, w;
} e[maxm << 1];
inline void addedge(int a, int b, int c) {e[++cnt] = (Edge) { b, head[a], c }; head[a] = cnt;
}int n, m, k, K, S, T;namespace Graph {int V[maxn << 2];long long dis[maxn];inline int getmin(int a, int b) { return dis[a] < dis[b] ? a : b; }void modify(int rt, int l, int r, int p, int num) {if (l == r) {V[rt] = num;return ;}const int mid = l + r >> 1;if (p <= mid) modify(rt << 1, l, mid, p, num);else modify(rt << 1 | 1, mid + 1, r, p, num);V[rt] = getmin(V[rt << 1], V[rt << 1 | 1]);}long long dijkstra(int S, int T) {const int N = n * K + 1;memset(dis, 0x3f, sizeof dis);memset(V, 0, sizeof V);dis[S] = 0, modify(1, 1, N, S, S);for (int TIM = n * K + 1; TIM; --TIM) {int u = V[1];modify(1, 1, N, u, 0);for (int i = head[u]; i; i = e[i].nxt) {int v = e[i].to;if (dis[v] > dis[u] + e[i].w) {dis[v] = dis[u] + e[i].w;modify(1, 1, N, v, v);}}}return dis[T];}
}int TIM, w[maxn];
int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);std::cin >> TIM;while (TIM --> 0) {std::cin >> n >> m >> k;K = 2 * k + 1;for (int i = 1, x; i <= n; ++i) std::cin >> x, w[i] = x - 1;for (int i = 0, a, b, c; i < m; ++i) {std::cin >> a >> b >> c;--a, --b;for (int j = 2; j <= K; ++j) {if (w[b + 1]) addedge(a * K + j - 1, b * K + j, c);else addedge(a * K + j, b * K + j - 1, c);if (w[a + 1]) addedge(b * K + j - 1, a * K + j, c);else addedge(b * K + j, a * K + j - 1, c);}}std::cin >> S >> T;--S, --T;for (int j = 1; j <= K; ++j) addedge(T * K + j, n * K + 1, 0);int St = S * K + k + 1;if (w[S + 1]) ++St; else --St;long long ans = Graph::dijkstra(St, n * K + 1);std::cout << (ans == 0x3f3f3f3f3f3f3f3f ? -1 : ans) << '\n';if (TIM) {memset(head, 0, sizeof head);cnt = 0;}}return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/11097827.html

[洛谷P5340][TJOI2019]大中锋的游乐场相关推荐

  1. 洛谷 P7453 [THUSCH2017] 大魔法师

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P7453 [THUSCH2017] 大魔法师 题目 题目描述 大魔法师小 L 制作了 n n n 个魔力水晶球,每个水晶球有水.火. ...

  2. 洛谷 P1230 智力大冲浪

    我的第一篇题解(辣鸡题解)洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为 ...

  3. 洛谷 P2867 [USACO06NOV]大广场Big Square

    P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...

  4. AC日记——神奇的幻方 洛谷 P2615(大模拟)

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  5. 洛谷P1230 智力大冲浪(贪心)

    P1230 智力大冲浪 题解:准着一个贪心思想,在尽可能短的时间内,做价值尽可能多的题. 因此,我们可以按照价值从大到小排个序,然后对于每一道题看在时间限制内可以做哪几道题.时间复杂度Θ(N2)\Th ...

  6. 洛谷P1230 智力大冲浪

    题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 m 元.先不要太高兴,因为这些钱还不一定都是你的.接下来主持人宣布了比赛规则: ...

  7. 做题记录 洛谷P1230 智力大冲浪

    题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...

  8. 洛谷p1230 智力大冲浪 (贪心问题)

    题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...

  9. 洛谷P5594 [XR-4] 模拟赛C++ 思路加代码

    这道题水题一个 题目闪回 本蒟蒻只会发水题 作为洛谷灌水区大水桶,今天第一次发文章,主要是看那些题解里的大佬,做法有点太大佬了一点点,用了结构体什么的,对新​​​​​​ju手ruo过于的不友善,所以今 ...

最新文章

  1. 不讲武德的微信,又来一波新功能!
  2. PHP图片文字水印效果
  3. vb net excel 剪贴板 粘贴_12-2-Excel快速编辑行列的10条经验
  4. java 数字图片识别_java – 识别图像中的数字
  5. Unity 3D学习笔记之一 界面介绍
  6. 【01背包】最大约数和(jzoj 2126)
  7. 数据结构探险——栈篇
  8. 华为云GuassDB(for Redis)发布全新版本推出:Lua脚本和SSL连接加密
  9. 洛谷P2134 百日旅行
  10. 【点阵液晶编程连载三/B】点阵LCD 的驱动与显控
  11. Bug提交规范及注意事项
  12. 这段百度问答,对我相关有对啊!!!----如何获取Windows系统登陆用户名
  13. 数据挖掘导论——综合实验
  14. 中控H10考勤机管理员密码破解
  15. uniapp 微信小程序 下拉刷新
  16. 你还在用命令看日志?快用 Kibana 吧,一张图片胜过千万行日志!
  17. Extraneous non-props attributes (ref_key) were passed to component but could not be automatically
  18. 《python3网络爬虫开发实战》学习笔记:pc与安卓代理证书都安装好但是无法监听——记自己的踩坑路径
  19. ctab法提取dna流程图_CTAB法提取DNA
  20. 制作NGUI动态字体

热门文章

  1. 微信里文件小程序导不出来_懒得打开电脑传文件?这四类小程序把这事解决了-小程序视频怎么发在电脑上...
  2. 操作系统的概念,功能和目标
  3. 什么是Ultrabook
  4. 微胖女孩穿什么样的衣服好看?
  5. 一定要陪一个男人创业,你会和他一样快速成长,并内心变得强大
  6. 躺赚的意思不是做到高级别就觉得高枕无忧了
  7. The process names are sorted in descending
  8. QItemSelectionModel——视图选择
  9. JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
  10. Java转型,多态和契约设计