codeforces 707D Persistent Bookcase
2016-08-21 10:18
337 查看
题意:一个n*m的矩阵执行四种操作:
1,i,j位置置1;
2,i,j位置置1;
3,第i行,0变1,1变0;
4,返回第i次操作的状态。
思路:我还真以为是可持久化呢!我就说CF咋出这么难的数据结构,没想到就一个简单的dfs。
代码:
1,i,j位置置1;
2,i,j位置置1;
3,第i行,0变1,1变0;
4,返回第i次操作的状态。
思路:我还真以为是可持久化呢!我就说CF咋出这么难的数据结构,没想到就一个简单的dfs。
代码:
#include<stdio.h> #include<string.h> #include<math.h> #include<queue> #include<vector> #include<iostream> #include<complex> #include<string> #include<set> #include<map> #include<algorithm> using namespace std; #pragma comment(linker, "/STACK:1024000000,1024000000") #define nn 100200 #define mm 400200 #define ll long long #define ULL unsiged long long #define pb push_back #define mod 1000000007 #define inf 0x3fffffff #define eps 0.00000001 int n, m, q; int op[nn], x[nn], y[nn]; bool a[1010][1010]; int nans = 0; int ans[nn]; int head[nn], sz=0; struct Edge { int to, next, len; Edge() {} Edge(int to, int next, int len) :to(to), next(next), len(len) {} }edge[nn * 2]; void add_edge(int x, int y, int z) { edge[sz] = Edge(y, head[x], z); head[x] = sz++; } void dfs(int u) { int fuck = 0; if (op[u] == 1 && a[x[u]][y[u]] == 0) { fuck = 1; a[x[u]][y[u]] = 1; nans++; } if (op[u] == 2 && a[x[u]][y[u]] == 1) { fuck = 1; a[x[u]][y[u]] = 0; nans--; } if (op[u] == 3) { fuck = 1; int k = x[u]; for (int i = 1; i <= m; i++) { if (a[k][i]) nans--, a[k][i] = 0; else nans++, a[k][i] = 1; } } ans[u] = nans; for (int i = head[u]; i!=-1; i = edge[i].next) dfs(edge[i].to); if (!fuck) return; if (op[u] == 1) a[x[u]][y[u]] = 0, nans--; if (op[u] == 2) a[x[u]][y[u]] = 1, nans++; if (op[u] == 3) { int k = x[u]; for (int i = 1; i <= m; i++) { if (a[k][i]) nans--, a[k][i] = 0; else nans++, a[k][i] = 1; } } } int main() { memset(head, -1, sizeof(head)); scanf("%d%d%d", &n, &m, &q); for (int i = 1; i <= q; i++) { scanf("%d%d", &op[i], &x[i]); if (op[i] == 1 || op[i] == 2) scanf("%d", &y[i]); if (op[i] == 4) add_edge(x[i], i,1); else add_edge(i - 1, i,1); } for (int i = head[0]; i != -1; i = edge[i].next) dfs(edge[i].to); for (int i = 1; i <= q; i++) printf("%d\n", ans[i]); return 0; }
相关文章推荐
- Codeforces 500B New Year Permutation( Floyd + 贪心 )
- Codeforces 25C Roads in Berland(floyed)
- CodeForces 631C Report
- Codeforces 768B Code For 1
- CodeForces - 557C. Arthur and Table
- codeforces 850c sg函数
- codeforces Good Bye 2014
- CodeForces 25D - Roads not only in Berland(并查集题目)
- CodeForces 633C Spy Syndrome 2
- codeforces 375D. Tree and Queries (莫队+分块)
- Codeforces 833B - The Bakery(DP+线段树)
- Garden CodeForces - 915A
- 【CODEFORCES】 D. Pashmak and Parmida's problem
- Codeforces 630R Game
- codeforces-703(好题)
- Codeforces 766B-Mahmoud and a Triangle
- CodeForces - 833B The Bakery(dp+线段树的巧妙运用)
- CodeForces - 916A
- codeforces 446B DZY Loves Modification(枚举)
- Codeforces 628A Tennis Tournament 【水题】