可以把修改当成删除再插入一个新的,

线性基不容易删除,就用线段树分治

好像手写的bitset在这里很慢

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define dbg(x) cerr<<#x" = "<<x<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define Es(x,i) for(Edge*i=G[x];i;i=i->nxt)
typedef long long ll;
typedef pair<int,int> pii;
const int inf=~0u>>1,MOD=1e9+7;
inline int rd() {
int x,c,f=1;while(!isdigit(c=getchar()))f=c!='-';x=c-'0';
while(isdigit(c=getchar()))x=x*10+c-'0';return f?x:-x;
} const int N=1011,MX=16;
typedef unsigned long long ui;
struct bs{
#define Q 64
ui w[MX];
bs (int _t=1){if(!_t)memset(w,0,sizeof w);}
bool operator<(const bs&t)const{
per(i,0,MX-1)if(w[i]!=t.w[i])return w[i]<t.w[i];
}
void operator^=(const bs&b){
For(i,0,MX)this->w[i]^=b.w[i];
}
bs operator^(const bs&b)const{
static bs c;
memset(c.w,0,sizeof c.w);
For(i,0,MX)c.w[i]=w[i]^b.w[i];
return c;
}
inline bool co(int i){
return w[i>>6]>>(i&63)&1;
}
inline void print(){
static int p[Q],i,j;
ui x;
for(i=MX-1;~i&&!w[i];--i);
if(i==-1){
putchar('0');
}
else{
j=0,x=w[i];
while(x)p[j++]=(x&1),x>>=1;
per(k,0,j-1)putchar(p[k]+'0');
for(--i;i>=0;--i){
ui x=w[i];
For(k,0,Q)p[k]=x&1,x>>=1;
per(k,0,Q-1)putchar(p[k]+'0');
}
}
putchar('\n');
}
#undef Q
};
int LL;
struct xxk{
bs a[N];
bool b[N];
xxk(int _t=1){if(!_t)memset(a,0,sizeof a);}
void add(bs x){
per(i,0,LL)if(x.co(i)){
if(!b[i]){
b[i]=1,a[i]=x;
break;
}else x^=a[i];
}
}
void qmx(){
static bs tmp,p;
memset(tmp.w,0,sizeof tmp.w);
per(i,0,LL)if(b[i]){
p=tmp^a[i];
if(tmp<p)tmp=p;
}
tmp.print();
}
} A[N<<2];
int ql,qr,qx;
bs ooo,p[N];
vector<bs> q[N<<2];
inline void tran(int o,int l,int r){
if(ql<=l&&r<=qr){
q[o].pb(p[qx]);
return;
}
int m=l+r>>1;
if(ql<=m)tran(o<<1,l,m);
if(qr>m)tran(o<<1|1,m+1,r);
}
inline void solve(int o,int l,int r){
A[o]=A[o>>1];
for(vector<bs>::iterator it=q[o].begin();it!=q[o].end();++it){
A[o].add(*it);
}
if(l==r){
A[o].qmx();
return;
}
int m=l+r>>1;
solve(o<<1,l,m),solve(o<<1|1,m+1,r);
}
char s[N];
int n,m;
int b[N];
int main(){
#ifdef flukehn
freopen("test.txt","r",stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
cin>>n;
cin>>n>>m;
rep(i,1,n)b[i]=1;
rep(i,1,m){
int u,v;
cin>>u>>v>>s;
if(u==v)continue;
memset(ooo.w,0,sizeof ooo.w);
int j=strlen(s)-1,p=0;
LL=max(LL,j);
while(j>=63){
ui &x=ooo.w[p];
rep(k,j-64+1,j)x=(x<<1)+(s[k]-'0');
j-=64,++p;
}
ui&x=ooo.w[p];
rep(k,0,j)x=(x<<1)+(s[k]-'0');
if(b[u]){
ql=b[u],qr=i-1,qx=u;
if(i!=1)tran(1,1,m);
b[u]=i,::p[u]^=ooo;
}
if(b[v]){
ql=b[v],qr=i-1,qx=v;
if(i!=1)tran(1,1,m);
b[v]=i,::p[v]^=ooo;
}
}
rep(i,1,n){
ql=b[i],qr=m,qx=i;
tran(1,1,m);
}
solve(1,1,m);
}

BZOJ 4644的更多相关文章

  1. [BZOJ]4644: 经典傻逼题

    某天我觉得一切题目都是那么不可做,于是百度了一下"傻逼题"-- 题目大意:对于图中的任意一个点集(可以为空或者全集),所有恰好有一个端点在这个点集中的边组成的集合被称为割.一个割的 ...

  2. 解题:BZOJ 4644 经典砂比题(雾

    题面 初见线段树分治 (对我来说可不是什么经典题=.=) 把时间轴建出来一棵线段树,然后在对应的区间上打标记,最后把整棵树DFS一遍,到叶节点输出答案即可 (把最终答案开成全局的了调了半天 #incl ...

  3. 【BZOJ】【4146】 【AMPPZ2014】Divisors

    暴力 由于值的范围很小($ \leq 2*10^6$),所以用一个cnt数组统计每个值有多少个数,然后从小到大,统计每个数的倍数即可. 根据调和数?的神奇性质= =这样是$O(nlogn)$的…… / ...

  4. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  5. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  6. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  7. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  8. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  9. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

随机推荐

  1. Entity Framework入门教程(9)---离线场景附加实体图集到上下文

    附加离线实体图集到上下文 这节主要内容是通过不同的方法将离线实体附加到上下文中. 在离线场景中,保存一个实体要略微困难一些.当我们保存一个离线的实体图集或一个单独的离线实体时,我们需要做两件事.首先, ...

  2. EF CodeFirst系列(6)---配置1对1,1对多,多对多关系

    这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通 ...

  3. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)

    https://nanti.jisuanke.com/t/31462 题意 一个N*M的矩形,每个格点到其邻近点的边有其权值,需要构建出一个迷宫,使得构建迷宫的边权之和最小,之后Q次查询,每次给出两点 ...

  4. PWD的编译及调试

    实现mypwd 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd Linux命令学习:pwd命令 该命令用来显示目前 ...

  5. python中jsonpath模块的运用

    1. jsonpath介绍用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, ...

  6. Python3:排序函数sort() 和 sorted() 之介绍

    今天来讲一下Python中的排序函数.Python中有2个内建的排序函数,分别为sort() 和 sorted() 下面介绍分别介绍一下2个函数: 1.有一个列表 :a=[1,4,5,88,0,7], ...

  7. eclipse下classes文件夹无法发布到tomcat的问题--tomcat发布慢的问题

    === 解决eclipse下classes文件夹无法发布到tomcat的问题_Nautilus_新浪博客http://blog.sina.com.cn/s/blog_484d8777010130n5. ...

  8. Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'

    Information:Gradle tasks [:app:assembleDebug]Error:Execution failed for task ':app:transformResource ...

  9. ActiveMQ之topic主题模式

    开发环境我们使用的是ActiveMQ 5.11.1 Release的Windows版,官网最新版是ActiveMQ 5.12.0 Release,大家可以自行下载,下载地址.需要注意的是,开发时候,要 ...

  10. Django目录

    app和ORM的操作与介绍 框架简介 中间件 form介绍 Django自带用户认证 cookie和session 模版 模板2 ORM操作 所有ORM操作(第二版) Django请求生命周期 Dja ...