2019/10/24 CSP-S 模拟
T1 tom
题意:

考虑一定是属于\(a\)的在一坨,属于\(b\)的在一坨,找到这条连接\(a\)和\(b\)的边,然后分别直接按\(dfs\)序染色即可
注意属于\(a\)的连通块或属于\(b\)的连通块可能在\(dfs\)树上不都体现为一棵完整的子树,所以需要都判断一下
#include<bits/stdc++.h>
#define N (200000 + 10)
using namespace std;
inline int read() {
int cnt = 0, f = 1; char c = getchar();
while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + (c ^ 48); c = getchar();}
return cnt * f;
}
int n, a, b, x, y, fa[N], siz[N], id[N], val;
int first[N], to[N], nxt[N], tot;
void add (int x, int y) {nxt[++tot] = first[x], first[x] = tot, to[tot] = y;}
void get_siz(int x, int father) {
siz[x] = 1; fa[x] = father;
for (register int i = first[x]; i; i = nxt[i]) {
int v = to[i];
if (v == father) continue;
get_siz(v, x), siz[x] += siz[v];
}
}
void print(int x, int fa, int d) {
for (register int i = first[x]; i; i = nxt[i]) {
int v = to[i];
if (v == fa) continue;
print(v, x, d);
}
val += d;
id[x] = val;
}
void work () {
bool ok = 0;
get_siz(1, 0);
for (register int i = 1; i <= n; ++i)
if (siz[i] == a) {
val = 0;
print(i, fa[i], 1);
val = 0;
print(fa[i], i, -1);
ok = 1;
} else if (siz[i] == b) {
val = 0;
print(i, fa[i], -1);
val = 0;
print(fa[i], i, 1);
ok = 1;
}
if (!ok) puts("-1");
else for (register int i = 1; i <= n; ++i) printf("%d ", id[i]);
putchar('\n');
}
int main() {
n = read(), a = read(), b = read();
for (register int i = 1; i <= n - 1; ++i) {
x = read(), y = read();
add(x, y), add(y, x);
}
work();
return 0;
}
T2 Jerry
首先能发现一个性质,括号结构最多嵌套两层
如果有三层的嵌套可以这样化简
( ( ( ) ) )
↓
( ( ) ( ) )
符号反三层和反一层等价
设\(f[i][0~2]\)表示当前处理到第\(i\)位,前面有\(0/1/2\)个未配对的左括号
在当前数\(>0\)时状态转移考虑补右括号,\(<0\)时考虑先强行在“-”后补一个左括号(如果对答案不优,自然会在后面的更新中去掉:-(a) + b),再进行转移
具体方程看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int cnt = 0, f= 1;char c = getchar();
while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + (c ^ 48); c = getchar();}
return cnt * f;
}
int T, n, a[500010], dp[500010][3];
signed main() {
T = read();
while (T--) {
n = read();
for (register int i = 1; i <= n; ++i) a[i] = read();
dp[0][0] = 0, dp[0][1] = dp[0][2] = -1e18;
for (register int i = 1; i <= n; ++i)
if (a[i] > 0) {
dp[i][0] = max(max(dp[i - 1][0] + a[i], dp[i - 1][1] + a[i]), dp[i - 1][2] + a[i]);
dp[i][1] = max(dp[i - 1][1] - a[i], dp[i - 1][2] - a[i]);
dp[i][2] = dp[i - 1][2] + a[i];
} else {
dp[i][0] = -1e18;
dp[i][1] = max(max(dp[i - 1][0] + a[i], dp[i - 1][1] + a[i]), dp[i - 1][2] + a[i]);
dp[i][2] = max(dp[i - 1][1] - a[i], dp[i - 1][2] - a[i]);
}
printf("%lld\n", max(max(dp[n][0], dp[n][1]), dp[n][2]));
}
return 0;
}
T3太麻烦了不想写,先咕了
2019/10/24 CSP-S 模拟的更多相关文章
- 2019.10.24 CSP%你赛第二场d1t3
题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒 ...
- 2019/10/17 CSP模拟 总结
T1 补票 Ticket 没什么好说的,不讲了 T2 删数字 Number 很后悔的是其实考场上不仅想出了正解的方程,甚至连优化都想到了,却因为码力不足只打了\(O(n^2)\)暴力,甚至还因为细节挂 ...
- 2019.10.26 CSP%您赛第三场
\(CSP\)凉心模拟^_^ --题源\(lqx.lhc\)等各位蒟蒻 题目名称 比赛 传递消息 开关灯 源文件名 \(competition.cpp\) \(message.cpp\) \(ligh ...
- 2019.10.15 CSP初赛知识点整理
初赛需要的知识点整理如下: (1)计算机的硬件组成与基本常识 (2)单位/进制的转换 (3)进制/逻辑运算相关 (4)概率与期望 (5)排序的各种性质 (6)简单数据结构的使用(栈.队列.链表等) ( ...
- 2019.10.28 CSP%您赛第四场t3
我写不动前两个了. 原谅一下. ____________________________________________________________________________________ ...
- 2019.10.29 CSP%您赛第四场t2
我太菜了我竟然不会分层图最短路 ____________________________________________________________________________________ ...
- Alpha冲刺(1/10)——2019.4.24
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(1/10)--2019.4.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- 2019.11.9 csp-s 考前模拟
2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
随机推荐
- Solrj API读取core 索引库数据
private static String zkHost = "ip:2181,ip:2181,ip:2181"; private static CloudSolrServer s ...
- vue中excal表格的导入和导出
注意:vue中要实现表格的导入与导出,首先要install两个依赖, npm install -S file-saver xlsx 和 npm install -D script-loader.其 ...
- HDU 3308 线段树求区间最长连续上升子序列长度
题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...
- lnmp高人笔记
http://www.cnblogs.com/qizekai/p/5878774.html http://www.cnblogs.com/qizekai/p/5879461.html
- Gamma(1)
目前为止看到的解释Gamma来由说得最清楚的一篇文章:https://www.cambridgeincolour.com/tutorials/gamma-correction.htm 几点总结. 1, ...
- OrCAD(2) -- 编辑原理图库时的复制与粘贴
大家都知道,OrCAD元器件的管脚编辑是基于Excel的,但是在编辑原理图库的管脚的时候,大家应该都有体会'ctrl+c' 和 'ctrl+v' 的命令是不能用的. 这是因为该两个命令在OrCAD中都 ...
- Redis 常用的数据结构
String 字符串 set get 使用场景: 可以用来作为缓存使用(缓存更新策略和缓存雪崩如何处理) List lpop rpop lpush rpush 使用场景: set 无序集合 使用场景: ...
- Windows start
启动一个单独的窗口以运行指定的程序或命令. START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] ...
- 初步了解Redis
参考: https://juejin.im/post/5b4dd82ee51d451925629622?utm_source=gold_browser_extension https://www.cn ...
- 【题解】洛谷 P1061 Jam的计数法
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int ...