Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两个网格图有多少个格子不一样. 注释:$1\le n\le 5\cdot 10^4$,$1\le m\le 15$,$1\le q\le 10^4$. 想法:由于网格图的列比较少,很容易想到对每行建立一棵线段树. 然后就是线段树上维护的东西:我们考虑直接维护成对应区间中有多少不一样的格子数. 这个属性…
传送门 线段树区间修改傻题 #include <cstdio> #include <cstring> #include <iostream> #define N 50001 #define root 1, 1, n #define ls now << 1, l, mid #define rs now << 1 | 1, mid + 1, r int n, m, q, res; int ans[16][N << 2], sum[16][…
[CF576E]Painting Edges 题意:给你一张n个点,m条边的无向图,每条边是k种颜色中的一种,满足所有颜色相同的边内部形成一个二分图.有q个询问,每次询问给出a,b代表将编号为a的边染成颜色b,但如果染色后不能满足所有颜色相同的边内部都是二分图就不染.问你每次是否能染成功. $n,m,q\le 5\times 10^5,k\le 50$ 题解:本题看起来要求在线,实质上完全可以离线. 如果没有不染这种操作的话,那么直接线段树按时间分治+并查集按秩合并就完事了.但如果有呢?我们先假…
http://www.lydsy.com/JudgeOnline/problem.php?id=1664 和之前的那题一样啊.. 只不过权值变为了1.. 同样用线段树维护区间,然后在区间范围内dp. upd:(其实权值为1的可以直接贪心....右端点来就行了... #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream>…
Transmission Delay 传输谍延时 bzoj-1581 Usaco-2009 Hol 题目大意:题目链接. 注释:略. 想法: 动态规划. 首先我们考虑从后往前dp.(最近好多题都是从后往前啊). 这个题就是如此. 状态:dp[i][j]表示i~n中用了j个1的方案数. 第一问中我们只需要加就行了. 第二问,如果当前位是0的方案比k大,那么我们将这位上添0: 如果当前位是0的方案比k小,我们将这位添1. 最后,附上丑陋的代码... ... #include <iostream>…
庙会捷运 Fair Shuttle bzoj-1577 Usaco-2009 Feb 题目大意:有一辆公交车从1走到n.有m群奶牛从$S_i$到$E_i$,第i群奶牛有$W_i$只.车有一个容量c.问不走回头路的情况下最多使多少奶牛到达目的地.其中,每一群奶牛不一定都拉走. 注释:$1\le n\le 2\cdot 10^4$,$1\le m\le 5\cdot 10^4$,$1\le c\le 100$. 想法:开始觉得是个裸贪心,但是没法维护.其实是这样的: 我们将所有的奶牛群排序:右端点为…
[题意] 给定一个无向图,找到1-i所有的次短路经,要求与最短路径的最后一条边不重叠. [思路] 首先用dijkstra算法构造以1为根的最短路树. 将一条无向边看作两条有向边,考察一条不在最短路树上的边(u,v),如果我们连接(u,v) ,设t=lct(u,v),则为v->t(不含t)路径上的点提供了另外一条1-x的路径且最后一条边不与最短路重合,这条路径长度为dis[u]+dis[v]+e.w-dis[x],对于每个点维护最小的mn=dis[u]+dis[v]+e.w,因为每次需要对一条路径…
1019 离散化都忘记怎么写了 注意两个端点 离散化后用线段树更新区间 混色为-1  黑为2  白为1  因为N不大 最后直接循环标记这一段的颜色查找 #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> using namespace std; #define N 100010 #define LL long l…
观察到列数只有15,可以想到对于每一列维护一颗线段树 sum表示该区间与目标矩阵中该区间相同元素个数 lazy表示该区间应被修改成什么颜色 g即目标矩阵中该区间白色格子的个数 显然一个区间的sum=区间长度-g(修改为0时) 或 g(修改为1时) #define RG register #include<cstdio> using namespace std; ; int n,m,q,X,Ans; ]; inline int read() { RG ,w=;RG char ch=getchar…
线段树水题,考虑到只有15列,所以我们对于每一列,我们都去维护一个线段树. 现在来考虑一下修改操作,因为每次修改的时候,我们都是将黑的改成白的,白的改成黑的,所以我们对线段树的每个节点维护当前这段区间和原来颜色相同的点的个数,所以每次改成白色我们只需要找原来是白色的总数,或者黑色,所以就特别简单了. 下面是代码. //author Eterna #define Hello the_cruel_world! #pragma GCC optimize(2) #include<iostream> #…