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两种,分别 ...
随机推荐
- css布局-瀑布流的实现
一.基本思路 1.先看最终的效果图: 2.实现原理:通过position:absolute(绝对定位)来定位每一个元素的位置,并且将当前列的高度记录下来方便下一个dom位置的计算 二.代码实现 1.版 ...
- shell 脚本 功能性语句 read,expr,test
1. read 从终端输入数据赋值给变量 read val 把读入的数据存放到val中 #!/bin/bash echo -n "please input two number :" ...
- python包的安装
Microsoft Windows [版本 10.0.17134.228] (c) 2018 Microsoft Corporation.保留所有权利. C:\Users\Administrator& ...
- struts使用
下载文件 <action name="download" class="thirdIssueAction" method="getDownloa ...
- Binary XML file line #23: Error inflating class android.widget.TextView
分析一波,报错23行TextView的问题,但是检查了xml没有发现23行又TextView相关代码,就不应该继续纠结xml了,代码是通过R文件拿到xml资源的,你就应该怀疑是R文件的问题,R文件编译 ...
- Laravel 迁移检查表是否存在
Schema::hasTable('TableName'); //检查表释放存在 Schema::hasColumn('tableName', 'columeName'); //检查表是否存在某个字段 ...
- fiddler突然间抓不到包了
1.一直使用fiddler抓包,但是近几天fiddler突然间抓不到过滤地址的包了. 2.重装fiddler,未能解决. 3.设置取消浏览器的代理,未能解决. 4.关闭杀毒软件,未能解决. 5.换了火 ...
- Windows copy
将一份或多份文件复制到另一个位置. COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B] [+ source ...
- PouchContainer 开源版本及内部版本一致性实践
PouchContainer 开源版本及内部版本一致性实践 为什么要做内外版本一致 对外开源是提升影响力.共建生态的有力手段.在项目对外开源的过程中,首先是将可以开源的部分抽离出来,发布一个“开源版本 ...
- RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)
摘要: 事务消息提交或回滚的实现原理就是根据commitlogOffset找到消息,如果是提交动作,就恢复原消息的主题与队列,再次存入commitlog文件进而转到消息消费队列,供消费者消费,然后将原 ...