test20230225考试总结(2023春 · 图论)
前言
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\) 条边:
- \(x \to y\),权值为 \(-w\);
- \(y \to x\),权值为 \(w\);
- \(x \to y\),权值为 \(0\);
- \(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春 · 图论)的更多相关文章
- test20230111考试总结 -2023寒图论专题
前言 赛时得分情况: A B C D E F G H I \(\texttt{Total}\) \(\texttt{Rank}\) \(100\) \(100\) \(10\) \(58\) \(54 ...
- test20230109考试总结-2023寒搜索专题
前言 2023 年的第一篇考试总结-- 赛时得分情况: A B C D E F G \(\texttt{Total}\) \(\texttt{Rank}\) \(40\) \(80\) \(0\) \ ...
- DP&图论 DAY 6 下午 考试
DP&图论 DAY 6 下午 考试 样例输入 样例输出 题解 >50 pt dij 跑暴力 (Floyd太慢了QWQ O(n^3)) 枚举每个点作为起点,dijks ...
- 躬身入局,干货分享,2023年春招后端技术岗(Python)面试实战教程,Offer今始为君发
早春二月,研发倍忙,杂花生树,群鸥竟飞.为什么?因为春季招聘,无论是应届生,还是职场老鸟,都在摩拳擦掌,秣马厉兵,准备在面试场上一较身手,既分高下,也决Offer,本次我们打响春招第一炮,躬身入局,让 ...
- 2023年2月份CKA考试历程
2023年2月份CKA 考试历程 目录 2023年2月份CKA 考试历程 一.购买CKA/CKS套餐 二.CKA 考试练习 三.CKA 第一次考试 考前考中 考后 四.CKA 第二次考试 五.考试的一 ...
- 2019年春PAT甲级考试
这次考试不是很理想,一道题目没能做完. 自己原因差不多三条: 1.自己实力不够,准备时间也有点仓促,自己没能做到每道题目都有清晰的思路. 2.考试的心理素质不行,因为设备原因东奔西跑浪费了挺多时间,自 ...
- 图论专题1考试Problem1
Problem 1. bricksInput file: bricks.inOutput file: bricks.outTime limit: 1 secondjyb 在BUAA 天天被大神虐,所以 ...
- 链家2018春招C/C++开发实习生在线考试编程题
题目一 题解:该题目意思就是让你输入n组数据,然后求并集,利用STL容器set集合的特性:元素不重复存储,我们可以很轻易得出答案 #include <iostream> #include ...
- 【洛谷2019 OI春令营】期中考试
T68402 扫雷 题目链接:传送门 题目描述 扫雷,是一款单人的计算机游戏.游戏目标是找出所有没有地雷的方格,完成游戏:要是按了有地雷的方格,游戏失败.现在 Bob 正在玩扫雷游戏,你作为裁判要判断 ...
- DP&图论 DAY 3 下午 考试
Problem AProblem Description有一天 Tarzan 写了一篇文章,我们发现这文章当中一共出现了 n 个汉字,其中第 i 个汉字出现了 ai 次,因为 Tarzan 不希望文章 ...
随机推荐
- Swift WisdomProtocol 面向协议编程(下)
WisdomProtocol 面向协议编程(下) @[TOC] WisdomProtocol SDK 面向协议编程 # Welcome to use WisdomProtocol WisdomProt ...
- BS系统自动更新的实现
背景: 我公司做的考试系统(基于java开发的BS系统)是卖给学校的,随着客户数量增多,日常版本升级.远程维护工作占了程序员很多时间,遂考虑实现系统自动化更新. 要解决的问题及解决方案: 1.什么时候 ...
- Oracle 定时任务job实际应用
目录 一.Oracle定时任务简介 二.dbms_job涉及到的知识点 三.初始化相关参数job_queue_processes 四.实际创建一个定时任务(一分钟执行一次),实现定时一分钟往表中插入数 ...
- selenium 多浏览器处理
开头 当我们做多浏览器自动化测试的时候,需要很多不同的浏览器,所以不同的参数对应不同的浏览器操作 目录结构 新建一个 base.py 文件, 通过 os 捕获到从命令行传进来的 import pyte ...
- 2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ‘ ‘ 。 每个单词只由小写
2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. 为了简单起见,你可以假设: words.txt只包括小写字母和 ' ' . 每个单词只由小写 ...
- 2021-07-11:给定一个棵完全二叉树,返回这棵树的节点个数,要求时间复杂度小于O(树的节点数)。
2021-07-11:给定一个棵完全二叉树,返回这棵树的节点个数,要求时间复杂度小于O(树的节点数). 福大大 答案2021-07-11: 右树最左节点层数==左树最左节点层数,左树是满二叉树,统计左 ...
- 浅谈如何使用 github.com/yuin/gopher-lua
最近熟悉 go 项目时,发现项目中有用到 github.com/yuin/gopher-lua这个包,之前并没有接触过,特意去看了官方文档和找了些网上的资料,特此记录下. 本次介绍计划分为两篇文章,这 ...
- vue全家桶进阶之路40:Vue3父件传值给子件
在Vue3中,可以通过props将父组件的数据传递给子组件.具体步骤如下: 在父组件中定义要传递给子组件的数据,可以是data属性中的数据或者是计算属性computed中的数据. 在子组件中通过pro ...
- 《数据结构(C语言版)》严蔚敏代码实现———顺序表
一.前言 最近在重新学习数据结构啦,网上说这本书挺不错哒,于是我开始啃这本书咯...有一说一,严奶奶的书挺好的,就是有点大量使用指针...需要沉下心来,看一看画一画才能懂,我自己手敲了一遍书上代码,加 ...
- C盘清理,移动node 依赖和缓存文件
由于先前安装的node 没有做任何配置,都是傻瓜式下一步,导致了我很多依赖都放置C盘,内存占用过多:也不太好管理所有觉得将它移动到node安装目录 一.新建文件夹 在原本安装的nodejs目录下新建 ...