codeforces 707D-(DFS+bitset)
题目链接:http://codeforces.com/contest/707/problem/D
根据询问建立一棵树然后DFS。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+3;
const int maxn=1e5+3;
int n,m,q;
vector<int> G[maxn];
bitset<N> bit[N];
bitset<N> opp;
int ope[maxn],a[maxn],b[maxn],ans[maxn];
void dfs(int x)
{
if(ope[x]==1)
{
int flag=0;
if(!bit[a[x]][b[x]])
{
bit[a[x]][b[x]]=1;
ans[x]++;
flag=1;
}
for(int i=0;i<G[x].size();i++)
{
ans[G[x][i]]=ans[x];
dfs(G[x][i]);
}
if(flag)
bit[a[x]][b[x]]=0; }
else if(ope[x]==2)
{
int flag=0;
if(bit[a[x]][b[x]])
{
bit[a[x]][b[x]]=0;
ans[x]--;
flag=1;
}
for(int i=0;i<G[x].size();i++)
{
ans[G[x][i]]=ans[x];
dfs(G[x][i]);
}
if(flag)
bit[a[x]][b[x]]=1;
}
else if(ope[x]==3)
{
ans[x]+=m-2*bit[a[x]].count();
bit[a[x]]^=opp;
for(int i=0;i<G[x].size();i++)
{
ans[G[x][i]]=ans[x];
dfs(G[x][i]);
}
bit[a[x]]^=opp;
}
else
{
for(int i=0;i<G[x].size();i++)
{
ans[G[x][i]]=ans[x];
dfs(G[x][i]);
}
}
}
int main()
{
scanf("%d %d %d",&n,&m,&q);
for(int i=1;i<=m;i++)
opp[i]=1;
for(int i=1;i<=q;i++)
{
scanf("%d",&ope[i]);
if(ope[i]==1)
{
scanf("%d %d",a+i,b+i);
G[i-1].push_back(i);
}
else if(ope[i]==2)
{
scanf("%d %d",a+i,b+i);
G[i-1].push_back(i);
}
else if(ope[i]==3)
{
scanf("%d",a+i);
G[i-1].push_back(i);
}
else
{
scanf("%d",a+i);
G[a[i]].push_back(i);
}
}
for(int i=0;i<G[0].size();i++)
{
ans[G[0][i]]=0;
dfs(G[0][i]);
}
for(int i=1;i<=q;i++)
printf("%d\n",ans[i]);
return 0;
}
codeforces 707D-(DFS+bitset)的更多相关文章
- Persistent Bookcase CodeForces - 707D (dfs 离线处理有根树模型的问题&&Bitset)
Persistent Bookcase CodeForces - 707D time limit per test 2 seconds memory limit per test 512 megaby ...
- [HIHO1041]国庆出游(DFS, bitset)
题目链接:http://hihocoder.com/problemset/problem/1041 学会了用C++的bitset哈,可喜可贺.以后遇到超过64位想用位来表示状态就不愁了哈. 这题用bi ...
- Military Problem CodeForces 1006E (dfs序)
J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个 ...
- Graph Without Long Directed Paths CodeForces - 1144F (dfs染色)
You are given a connected undirected graph consisting of nn vertices and mm edges. There are no self ...
- [CSP-S模拟测试]:世界线(DFS+bitset)
题目描述 时间并不是一条单一的线,而是有许多世界线构成的流. 在一些时刻,世界线会发生分裂:同样的,它们也有可能在一些时刻收束在一起.如果将这些时刻抽象成点,那么这些世界线构成的网络,实际上是一张有向 ...
- 素数环(dfs+回溯)
题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...
- UVA 291 The House Of Santa Claus(DFS算法)
题意:从 节点1出发,一笔画出 圣诞老人的家(所谓一笔画,就是遍访所有边且每条边仅访问一次). 思路:深度优先搜索(DFS算法) #include<iostream> #include&l ...
- 历届试题 邮局(dfs+剪枝)
历届试题 邮局 时间限制:1.0s 内存限制:256.0MB 问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流.为了方便村民们发信,C村打算在C村建设k ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- codeforces 731C(DFS)
题目链接:http://codeforces.com/contest/731/problem/C 题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少 ...
随机推荐
- python中2进制、10进制、16进制等之间的转换
10转2: bin(8) # '0b1000' 2转10: int( 10转16: hex(15) # '0xf' 16转10: int( 2进制和16进制中间通过转10进制可以相互转换 from b ...
- linux shell 当前时间
#!/bin/bashdatestr=`date --date='today' "+%Y-%m-%d %H:%M:%S"`echo $datestr
- C#识别验证码技术-Tesseract
相信大家在开发一些程序会有识别图片上文字(即所谓的OCR)的需求,比如识别车牌.识别图片格式的商品价格.识别图片格式的邮箱地址等等,当然需求最多的还是识别验证码.如果要完成这些OCR的工作,需要你掌握 ...
- java二维数组的定义
java中的一维数组的定义都熟了,但是二位数组和一维数组的定义有些微差别.在网上看到了篇文章,总结的很详细.转载下了. 原文链接[http://blog.sina.com.cn/s/blog_6189 ...
- 使用ASP.Net WebAPI构建REST服务(五)——客户端
WebAPI是标准的Http协议,支持Http协议的客户端(如浏览器)都可以访问.但是,有的时候我们如果想在自己的程序中使用WebAPI时,此时就要实现自己的客户端了.我之前介绍过在.Net 4.5中 ...
- nbtstat -a <IP> 会显示主机名、所在工作组等信息
nbtstat -a <IP> 会显示主机名.所在工作组等信息
- 启用jboss热部署
Please make sure to add <configuration> <jsp-configuration deve ...
- 【SQL查询日志】查看数据库历史查询记录
--关键字:cross apply & outer apply --最后更新:2011-10-20 作者:Ronli--更新链接:http://www.cnblogs.com/ronli/ar ...
- UIButton 点击后变灰
+(UIButton *)getBlueButtonWithTitle:(NSString *)aTitle{ UIButton *button = [UIButton buttonWithType: ...
- Android studio 环境搭建
环境变量: CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar JAVA_HOME:F:\Prog ...