CS round--36
https://csacademy.com/contest/round-36/summary/
C题是一个贪心,最坏情况是,一开始肯定是每一对袜子都抽一个,然后就需要N个袜子了。后面的情况就是相同的了。
就是,整个数组变成了1、1、1、1、1、1、1、1、1这样,之后任意拿一个袜子,都会增加1pair,然后1-->0,很明显第二次拿应该在刚才那个地方拿,使得0-->1,这样pair数不增加,然后又回到1、1、1、1、1、...这样的状态。所以以后就是在同一种颜色里面操作就好了。
对于本来是奇数的情况,全部拿完是最坏的情况,因为有一个袜子匹配不了。
对于本来是偶数的情况,拿奇数个是最坏的情况,因为这样也有一个袜子匹配不了。
然后直接贪心。
D题是一个树的dfs
用一个数组表示当前的集合,cnt表示集合的大小。
每个节点都有insert, erase操作,dfs的时候,回溯的时候反向更新就好(就是本来insert的变成erase)
但是要注意它时候有这个操作,就是本来是erase的,然而当前集合压根就没这个元素,这是有一个没用的操作。
回溯的时候不要重新insert就好
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = 1e5 + ;
struct Edge {
int u, v, tonext;
}e[maxn * ];
int first[maxn], num;
struct Node {
int val;
bool isUsed;
Node(int _val, int _isUsed) {
val = _val, isUsed = _isUsed;
}
};
vector<Node> vc[maxn];
void addEdge(int u, int v) {
e[num].u = u, e[num].v = v, e[num].tonext = first[u];
first[u] = num++;
}
int ans[maxn];
bool in[maxn];
int cnt;
void dfs(int cur) {
for (int i = ; i < vc[cur].size(); ++i) {
int val = vc[cur][i].val;
if (val > ) {
if (in[val]) continue;
in[val] = true;
cnt++;
vc[cur][i].isUsed = true;
} else {
val = -val;
if (!in[val]) continue;
in[val] = false;
cnt--;
vc[cur][i].isUsed = true;
}
}
ans[cur] = cnt;
for (int i = first[cur]; ~i; i = e[i].tonext) {
dfs(e[i].v);
}
for (int i = ; i < vc[cur].size(); ++i) {
if (vc[cur][i].isUsed == false) continue;
int val = vc[cur][i].val;
if (val > ) {
assert(in[val] == true);
in[val] = false;
cnt--;
} else {
val = -val;
in[val] = true;
cnt++;
}
}
}
void work() {
memset(first, -, sizeof first);
int n;
cin >> n;
for (int i = ; i <= n - ; ++i) {
int u;
cin >> u;
addEdge(u, i + );
}
for (int i = ; i <= n; ++i) {
int k;
cin >> k;
while (k--) {
int val;
cin >> val;
vc[i].push_back(Node(val, false));
}
}
dfs();
for (int i = ; i <= n; ++i) {
cout << ans[i] << endl;
}
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
// IOS;
work();
return ;
}
CS round--36的更多相关文章
- 【CS Round #36 (Div. 2 only) A】Bicycle Rental
[题目链接]:https://csacademy.com/contest/round-36/task/bicycle-rental/ [题意] 让你从n辆车中选一辆车; 每一辆车有3个属性 1.到达车 ...
- 【codeforces】【比赛题解】#915 Educational CF Round 36
虽然最近打了很多场CF,也涨了很多分,但是好久没写CF的题解了. 前几次刚刚紫名的CF,太伤感情了,一下子就掉下来了,不懂你们Div.1. 珂学的那场我只做了第一题……悲伤. 这次的Education ...
- BestCoder Round #36 (hdu5198)Strange Class(水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Strange Class Time Limit: 2000/1000 MS (J ...
- CS Round#53 C Histogram Partition
题意:给定一个数组A,以及一个初始值全为0的空数组B,每次可以对数组B的任意一个区间内的所有数+x,问至少几次操作能把B数组变成A数组 NOIP原题(积木大赛)升级版,话说CS怎么那么多跟NOIP原题 ...
- 【CS Round #43 A】Expected Dice
[链接]https://csacademy.com/contest/round-43/task/expected-dice/ [题意] 大水题 [题解] 把36种可能的结果都存下来. 然后把重复出现的 ...
- BestCoder Round #36 [B] Gunner
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5199 先对树的高度排序,然后对每次射击高度二分查找即可,打过之后数目变为0. #include< ...
- BestCoder Round #36 (hdu5200)Strange Class(离线)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Trees Time Limit: 2000/1000 MS (Java/Othe ...
- BestCoder Round #36 (hdu5199)Gunner(水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Gunner Time Limit: 8000/4000 MS (Java/Oth ...
- Cs Round#56 D Find Path Union
题意:有一棵如下的完全二叉树,求所有给定结点到根节点的路径的并有多少条边. 一开始联想到线段树,发现结点的排布很像线段树的标号.于是模仿线段树敲了一下,交上去发现3个点MLE了... 无心优化,跑去看 ...
- Cs Round#54 E Late Edges
题意:给定一个无向图,你从结点1开始走,每经过一条边需要1的时间,每条边都有一个开放时间,只有当目前所用的时间大于等于开放时间时,这条边才可以被经过.每一单位时间你都必须经过一条边,问最快什么时候可以 ...
随机推荐
- 【Lintcode】136.Palindrome Partitioning
题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...
- C# 深化基本概念
关于IDisposable的Dispose方法 .Net中GC会自动回收托管资源, 对于非托管资源应该使用Dispose方法. 在使用Dispose方法时,应注意避免在Dispose内部中继续释放托管 ...
- linux——boot空间不足
1. 先用df命令,查看磁盘分区情况 2. dpkg --get-selections|grep linux-image(查看更新了多少内核) root@ubuntu:/home/hadoop# dp ...
- DCloud-HTML5+:5+ App开发入门指南
ylbtech-DCloud-HTML5+:5+ App开发入门指南 1.返回顶部 1. 5+ App开发入门指南 App App入门 HTML5 Plus应用概述 HTML5 Plus移动App,简 ...
- 使用二次封装的openStack发行版本网卡至少有2个
- (十七)Spring 集成Quartz
在使用jdk的timer时发现无法满足这次的开发需求:即无法在指定的日期进行执行任务.这便引入一个优秀的开源任务调度框架“quartz”.这里加入的是quartz-1.8.6版本.Quart的官网:h ...
- 编译portmap和nfs-utils
编译portmap和nfs-utils 为了在播放机上实现NFS服务器的功能,我们已经在uClibc中打开了完整RPC支持,并且在新编译的内核中打开了NFS服务器支持.此外还有两个软件包也是提供NFS ...
- ASP.NET MVC (Umbraco)中如何设置网站超时自动退出
原文章请参考 https://edgewebware.com/2014/06/automatically-log-out-members-send-login-page-umbraco/ 在网站开发 ...
- Linux C/C++时间字符串与time_t之间的转换方法(转)
1.指定time_t类型的时间,格式化为YYYYMMDDHH24MISS型的字符串 void FormatTime(time_t time1, char *szTime) { struc ...
- 洛谷 P5162 WD与积木【多项式求逆】
设f[i]为i个积木能堆出来的种类,g[i]为i个积木能堆出来的种类和 \[ f[n]=\sum_{i=1}^{n}C_{n}^{i}g[n-i] \] \[ g[n]=\sum_{i=1}^{n}C ...