前言

I hate questions that already exist!!

我讨厌原题!!

赛时得分明细:

A B C D E F Total Rank
100 100 10 56 0 44 310 6

A. P1993 小 K 的农场

题面

给定长度为 \(n\) 的数组 \(A_1,A_2,A_3,\dots,A_n\) 和 \(m\) 个约束条件,约束条件有三种:

  • \(1\) \(x\) \(y\) \(c\) :\(A_x - A_y \ge c\);
  • \(2\) \(x\) \(y\) \(c\) :\(A_x - A_y \le c\);
  • \(3\) \(x\) \(y\) :\(A_x = A_y\);

输出是否存在合法的自然数解。存在输出 "\(Yes\)", 不存在输出 "\(No\)"。

\(1 \le n,m \le 5 \times 10^3\)

题解

差分约束模板

可以尝试把 \(A_x - A_y \ge c\) 转化为 \(A_y \le A_x - c\),把 \(A_x - A_y \le c\) 转化为 \(A_x \le A_y + c\)。

\(A_x = A_y\) 可以转化为 \(A_x - A_y = 0\),进而变成 \(A_x - A_y \le 0\) 且 \(A_x - A_y \ge 0\)。

每次遇到一个约束条件就将建 \(5\) 条边:

  1. \(x \to y\),权值为 \(-w\);
  2. \(y \to x\),权值为 \(w\);
  3. \(x \to y\),权值为 \(0\);
  4. \(y \to x\),权值为 \(0\);

建一个超级点,跑最短路即可。但不能用 \(dijkstra\),因为存在负环(或是要判负环)。

代码

#include <bits/stdc++.h>
#define int long long
#define H 19260817
#define rint register int
#define For(i,l,r) for(rint i=l;i<=r;++i)
#define FOR(i,r,l) for(rint i=r;i>=l;--i)
#define MOD 1000003
#define mod 1000000007 using namespace std; inline int read() {
rint x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
} void print(int x){
if(x<0){putchar('-');x=-x;}
if(x>9){print(x/10);putchar(x%10+'0');}
else putchar(x+'0');
return;
} const int N = 1e6 + 10; struct Node {
int v, w;
}; int n, m, q[N], dist[N], cnt[N]; bool st[N]; vector <Node> e[N]; bool spfa() {
int h = 1, t = 0;
memset(dist, 0x3f, sizeof dist);
memset(st, 0, sizeof st);
memset(cnt, 0, sizeof cnt);
q[++t] = 0, st[0] = 1, dist[0] = 0;
while(h <= t) {
int x = q[h++];
st[x] = 0;
for (int i = 0; i < e[x].size(); i++) {
int y = e[x][i].v, w = e[x][i].w;
if(dist[y] > dist[x] + w) {
dist[y] = dist[x] + w;
cnt[y] = cnt[x] + 1;
if(cnt[y] >= n + 1) return 0;
if(!st[y]) {
q[++t] = y;
st[y] = 1;
}
}
}
}
return 1;
} void add(int u, int v, int w) {
e[u].push_back((Node){v, w});
} signed main() {
n = read(), m = read();
For(i,1,m) {
int op = read(), x = read(), y = read();
if(op == 1) {
int w = read();
add(x, y, -w);
} else if(op == 2) {
int w = read();
add(y, x, w);
} else {
add(x, y, 0);
add(y, x, 0);
}
}
For(i,1,n) add(0, i, 0);
puts(spfa()?"Yes":"No");
return 0;
}

B. P2294 [HNOI2005]狡猾的商人

题面

对于一个长度为 \(n\) 的数组,给定 \(m\) 个部分和 \(\sum_{l=1}^{r} A_i\),判断该数组是否合法(合法输出 "\(Yes\)",不合法输出 "\(No\)")。

题解

代码

#include <bits/stdc++.h>
#define int long long
#define H 19260817
#define rint register int
#define For(i,l,r) for(rint i=l;i<=r;++i)
#define FOR(i,r,l) for(rint i=r;i>=l;--i)
#define MOD 1000003
#define mod 1000000007 using namespace std; inline int read() {
rint x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
} void print(int x){
if(x<0){putchar('-');x=-x;}
if(x>9){print(x/10);putchar(x%10+'0');}
else putchar(x+'0');
return;
} const int N = 2e5 + 10; int n, m, Q, f[N], val[N]; int find(int x) {
if(x == f[x]) return x;
else {
int root = find(f[x]);
val[x] += val[f[x]];
return f[x] = root;
}
} signed main() {
Q = read();
while(Q--) {
bool vis = 0;
n = read(), m = read();
For(i,0,n) f[i] = i, val[i] = 0;
For(i,1,m) {
int l = read(), r = read(), s = read();
l--;
int t1 = find(l), t2 = find(r);
if(t1 != t2) {
f[t2] = t1;
val[t2] = val[l] + s - val[r];
} else {
if(val[r] - val[l] != s) {
vis = 1;
puts("false");
break;
}
}
}
if(!vis) puts("true");
}
return 0;
}

C. P7624 [AHOI2021初中组] 地铁

题面

题解

代码

D. P6378 [PA2010] Riddle

题面

题解

代码

E. P3513 [POI2011] KON-Conspiracy

题面

题解

代码

F. P5905 【模板】Johnson 全源最短路

题面

题解

代码

test20230225考试总结(2023春 · 图论)的更多相关文章

  1. test20230111考试总结 -2023寒图论专题

    前言 赛时得分情况: A B C D E F G H I \(\texttt{Total}\) \(\texttt{Rank}\) \(100\) \(100\) \(10\) \(58\) \(54 ...

  2. test20230109考试总结-2023寒搜索专题

    前言 2023 年的第一篇考试总结-- 赛时得分情况: A B C D E F G \(\texttt{Total}\) \(\texttt{Rank}\) \(40\) \(80\) \(0\) \ ...

  3. DP&图论 DAY 6 下午 考试

    DP&图论  DAY 6  下午  考试 样例输入 样例输出 题解 >50 pt      dij 跑暴力 (Floyd太慢了QWQ    O(n^3)) 枚举每个点作为起点,dijks ...

  4. 躬身入局,干货分享,2023年春招后端技术岗(Python)面试实战教程,Offer今始为君发

    早春二月,研发倍忙,杂花生树,群鸥竟飞.为什么?因为春季招聘,无论是应届生,还是职场老鸟,都在摩拳擦掌,秣马厉兵,准备在面试场上一较身手,既分高下,也决Offer,本次我们打响春招第一炮,躬身入局,让 ...

  5. 2023年2月份CKA考试历程

    2023年2月份CKA 考试历程 目录 2023年2月份CKA 考试历程 一.购买CKA/CKS套餐 二.CKA 考试练习 三.CKA 第一次考试 考前考中 考后 四.CKA 第二次考试 五.考试的一 ...

  6. 2019年春PAT甲级考试

    这次考试不是很理想,一道题目没能做完. 自己原因差不多三条: 1.自己实力不够,准备时间也有点仓促,自己没能做到每道题目都有清晰的思路. 2.考试的心理素质不行,因为设备原因东奔西跑浪费了挺多时间,自 ...

  7. 图论专题1考试Problem1

    Problem 1. bricksInput file: bricks.inOutput file: bricks.outTime limit: 1 secondjyb 在BUAA 天天被大神虐,所以 ...

  8. 链家2018春招C/C++开发实习生在线考试编程题

    题目一 题解:该题目意思就是让你输入n组数据,然后求并集,利用STL容器set集合的特性:元素不重复存储,我们可以很轻易得出答案 #include <iostream> #include ...

  9. 【洛谷2019 OI春令营】期中考试

    T68402 扫雷 题目链接:传送门 题目描述 扫雷,是一款单人的计算机游戏.游戏目标是找出所有没有地雷的方格,完成游戏:要是按了有地雷的方格,游戏失败.现在 Bob 正在玩扫雷游戏,你作为裁判要判断 ...

  10. DP&图论 DAY 3 下午 考试

    Problem AProblem Description有一天 Tarzan 写了一篇文章,我们发现这文章当中一共出现了 n 个汉字,其中第 i 个汉字出现了 ai 次,因为 Tarzan 不希望文章 ...

随机推荐

  1. Linux/UNIX Shell $PATH变量

    Linux/UNIX的shell在执行命令时,会查找路径$PATH来录找命令. 1:$PATH是一个以冒号分隔的目录列表,执行命令时,会在列表中查找. 2:命令可以是SHELL脚本也可以是可执行文件, ...

  2. 小程序 TS 封装API

    通俗易懂不说废话,拿去用,看两遍就能理解. 1 const { baseUrl } = require('./env').dev; 2 const token = wx.getStorageSync( ...

  3. FFmpeg开发笔记(二)搭建Windows系统的开发环境

    由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的.不过若有已经 ...

  4. 使用require.context实现优雅的预加载

    前言 在前端开发中,对页面花里胡哨度[注1]要求越高的页面,用到的图片.音频什么的就越多,比如什么结婚请柬.展会请柬.发布会宣传页.数据大屏.虽然现在浏览器不允许网页在没有用户交互的情况下播放音频,但 ...

  5. (数据科学学习手札152)geopandas 0.13版本更新内容一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,昨天晚上geopandas正式 ...

  6. iOS中的3种定时器

    在iOS中有3种常见的定时器,它们会根据不同的场景进行选择使用. 1.DispatchSourceTimer: 基于GCD实现. 2.CADisplayLink:基于屏幕刷新实现. 3.Timer:基 ...

  7. 2022-08-30:给你一个字符串化学式 formula ,返回 每种原子的数量 。 原子总是以一个大写字母开始,接着跟随 0 个或任意个小写字母,表示原子的名字。 如果数量大于 1,原子后会跟着数

    2022-08-30:给你一个字符串化学式 formula ,返回 每种原子的数量 . 原子总是以一个大写字母开始,接着跟随 0 个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数 ...

  8. 2020-01-04:mysql里的innodb引擎的数据结构,你有看过吗?

    福哥答案2020-01-04: 面试官刚开始问我看过mysql源码没,然后问了这个问题.回答B+树,过不了面试官那关.答案来自<MySQL技术内幕 InnoDB存储引擎 第2版>第四章,时 ...

  9. 2021-03-24:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K,并且是长度最大的。返回其长度。

    2021-03-24:给定一个整数组成的无序数组arr,值可能正.可能负.可能0.给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K,并且是长度最大的.返回其长度. 福大大 答案20 ...

  10. AcWing901. 滑雪(python)

    题目详情 知识点 记忆化DP 思路 自己的思路(仅参考):一开始想的是找最大值,然后从最大值开始向下滑,但是我们是要求最长路径,不一定是从最高的点滑下去的,也不一定是滑到最低点,而且会存在最大值不止一 ...