2022杭电多校第四场C-Magic(差分约束)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=7176
代码:
1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<vector>
5 #include<map>
6 #include<queue>
7 #include<set>
8 #include<cmath>
9 #include<list>
10 #include<cstring>
11 #include<string>
12 #include<stack>
13 #define ll long long
14 #define ull unsigned long long
15 #define inf 0x3f3f3f3f
16 #define inff 0x7fffffff
17 using namespace std;
18 const int N = 100000 + 10;
19
20 int n, k;
21
22 struct node {
23 int to, w, next;
24 }edge[N];
25
26 int head[N];
27 int cnt;
28
29 void add(int u, int v, int w) {
30 edge[cnt].w = w;
31 edge[cnt].to = v;
32 edge[cnt].next = head[u];
33 head[u] = cnt++;
34 }
35
36 int In[N];
37 int dis[N];
38 int vis[N];
39
40 bool spfa(int s) {
41
42 queue<int>q;
43 memset(vis, 0, sizeof(vis));
44 memset(dis, 0x3f, sizeof(dis));
45 memset(In, 0, sizeof(In));
46
47 q.push(s);
48 vis[s] = true;
49 dis[s] = 0;
50 In[s]++;
51
52 while (!q.empty()) {
53
54 int tmp = q.front();
55 q.pop();
56 vis[tmp] = false;
57 for (int i = head[tmp]; i != -1; i = edge[i].next) {
58
59 int to = edge[i].to;
60 int disto = edge[i].w;
61 if (dis[to] > dis[tmp] + disto) {
62 dis[to] = dis[tmp] + disto;
63 if (!vis[to]) {
64 vis[to] = true;
65 q.push(to);
66 if (++In[to] > n + 1) return false;
67 }
68 }
69
70 }
71 }
72
73 return true;
74 }
75
76 int main() {
77
78 ios::sync_with_stdio(false);
79 cin.tie(0), cout.tie(0);
80
81 int T;
82 cin >> T;
83 while (T--) {
84 cin >> n >> k;
85 int p, q;
86 memset(head, -1, sizeof(head));
87 //memset(edge, 0, sizeof(edge));
88 cnt = 0;
89 for (int i = 1; i <= n; i++) {
90 cin >> p;
91 int rt = min(i + k - 1, n);
92 int lt = max(i - k, 0);
93 add(rt, lt, -p);
94 add(i, i - 1, 0);
95 }
96 cin >> q;
97 for (; q; --q) {
98 int l, r, b;
99 cin >> l >> r >> b;
100 add(l - 1, r, b);
101 }
102 for (int i = 1; i <= n; i++) {
103 add(n + 1, i, 0);
104 }
105 if (!spfa(n)) cout << -1 << "\n";
106 else {
107 cout << -dis[0] << "\n";
108 }
109 }
110
111
112 return 0;
113 }
永远热爱,永远向着光。
分类:
差分约束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人