正题

题目链接:http://www.ybtoj.com.cn/contest/118/problem/3


解题思路

给出\(n\)个点,\(m\)次动态插入一条无向边询问:割掉一些边使得图中至少两点不连通,并且割掉的边异或和最大。

询问之间相互独立

\(1\leq n\leq 500,1\leq m\leq 1000\)

边权以二进制形式给出,长度不超过\(1000\)


解题思路

要求分隔两个点,看起来很麻烦,其实有个结论。先定义\(w_i\)表示连接\(i\)的所有边的异或和,如果选出了一个点集\(U\)和外面的所有点都隔绝,那么割就是点集\(U\)中所有点的\(w_i\)值异或和。

其实挺显然的,因为如果两个点集中的点\(x,y\)之间的边被异或了两次就抵消掉了。

那么现在问题就变为了每次修改两个数,求最大异或和。

然后就是带修线性基的裸题了,有两种方法

在线做法是先删除再插入,就是开一个0行储存所有的没有成功插入线性基的元素,然后还要对于每个元素维护一个它插入的时候异或了哪些元素。

每次你删除一个元素\(x\)的时候,假设集合\(S\)中储存了所有插入的时候异或了\(x\)的元素(包括\(x\)本身),那么我们找出一个最小的\(y\in S\)(异或后),让所有\(S\)中的其他元素异或上\(y\)之后再将\(y\ xor\ c\)插入(\(c\)表示你要让\(x\)异或的值)

此时就相当于你将之前插入\(x\)时本应该异或的数变成了异或\(x\ xor\ c\)的,选出最小的\(y\)防止对后面的元素产生影响,然后修改后让\(y\)代替\(x\)成为新的主元插入。

加一个\(bitset\)优化,时间复杂度\(O(\frac{m(n+L)L}{w})\)

离线的做法是线段树分治,一个\(x\)的取值会被分为不同的时间段,每次将\(x\)的固定的时间段插入到线段树的对应区间,然后分治下去的时候维护一个撤销线性基就好了。

时间复杂度\(O(\frac{mL^2\log m}{w})\)(也许?)

这里写的是在线的做法


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
using namespace std;
const int N=1010;
bitset<N>w[N],v[N],c,ans;
int n,m,p[N];char s[N];
void Insert(int x){
for(int i=N-1;i>=0;i--)
if(w[x][i]){
if(p[i])w[x]^=w[p[i]],v[x]^=v[p[i]];
else{p[i]=x;return;}
}
return;
}
void Change(int x){
int pos=0;
for(int i=1;i<=n;i++)
if(v[i][x]&&!w[i].any()){pos=i;break;}
if(!pos)
for(int i=0;i<N;i++)
if(p[i]&&v[p[i]][x]){pos=p[i];p[i]=0;break;}
for(int i=1;i<=n;i++)
if(v[i][x]&&i!=pos)
w[i]^=w[pos],v[i]^=v[pos];
w[pos]^=c;
Insert(pos);return;
}
int main()
{
freopen("cut.in","r",stdin);
freopen("cut.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)v[i][i]=1;
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);scanf("%s",s);
int l=strlen(s);c.reset();
for(int j=0;j<l;j++)c[j]=s[l-j-1]-'0';
Change(x);
Change(y);bool flag=0;
ans.reset();
for(int i=N-1;i>=0;i--){
if(p[i]&&!ans[i])ans^=w[p[i]];
if(ans[i])flag=1;
if(flag)printf("%d",ans[i]?1:0);
}
if(!flag)puts("0");
else putchar('\n');
}
return 0;
}

YbtOJ#883-最大的割【带修线性基】的更多相关文章

  1. 【BZOJ4184】shallot(线段树分治,线性基)

    [BZOJ4184]shallot(线段树分治,线性基) 题面 权限题啊.....好烦.. Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把 ...

  2. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  3. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

  4. 主席树套树状数组——带修区间第k大zoj2112

    主席树带修第k大 https://www.cnblogs.com/Empress/p/4659824.html 讲的非常好的博客 首先按静态第k大建立起一组权值线段树(主席树) 然后现在要将第i个值从 ...

  5. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  6. BZOJ2120 数颜色 莫队 带修莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...

  7. BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...

  8. UVA 12345 Dynamic len(带修莫队)

    Dynamic len [题目链接]Dynamic len [题目类型]带修莫队 &题解: 莫队可以单点更改,只要再多加一维,代表查询次数,排序的时候3个关键字. 之后循环离线的时候,先暴力时 ...

  9. bzoj 2120 数颜色 (带修莫队)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间  l - r  内颜色的种类 ,R 单点修改 思路 ...

随机推荐

  1. 关于yii2学习笔记:gii的使用

    yii2中的gii无疑是非常强大的代码生成工具,以下是我学习使用gii的一些技巧,跟大家分享一下. 以User为例,在数据库中,创建user表. /*Navicat MySQL Data Transf ...

  2. node后台生成echarts图表

    1 //2,生成图片数据 2 var option = { 3 tooltip: { 4 trigger: 'item', 5 formatter: "{a} <br/>{b} ...

  3. SpringBoot2.0 防止XSS攻击

    一:什么是XSS XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中. 你可以自己做个简单尝试: 1. 在任何一个表单内,你输 ...

  4. 【java虚拟机】Java内存模型

    作者:平凡希 原文地址:https://www.cnblogs.com/xiaoxi/p/7518259.html 一.什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Jav ...

  5. Springboot使用MatrixVariable 注解

        根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对.规范中没对对应的术语.一般 "URL 路径参数" 可以被应用,尽管更加独特的 &qu ...

  6. mysql基础操作(二):简单查询DQL

    -- 1.查询所有字段 select * from student; -- 2.查询指定的字段 select id from student; select id, name from student ...

  7. 自建纯净谷歌搜索「GitHub 热点速览 v.21.35」

    作者:HelloGitHub-小鱼干 虽然 Google 搜索的结果不如百度搜索结果那般广告丛生,但是对于一心只想找到匹配结果的我们而言,推广的信息条目能免则免.whoogle-search 便是一个 ...

  8. 简析时序数据库 InfluxDB

    时序数据基础 时序数据特点 时序数据TimeSeries是一连串随时间推移而发生变化的相关事件. 以下图的 CPU 监控数据为例,同个 IP 的相关监控数据组成了一条时序数据,不相关数据则分布在不同的 ...

  9. ES6扩展——数值扩展

    1.0o代表八进制 0b代表二进制 ,通过Number()可转为10进制: //0o 0O octanary八进制 //0b 0B binary二进制 console.log(0o16); //14 ...

  10. 阿里云服务器部署mongodb

    在阿里云上买了个服务器,部署mongodb遇到一些坑,解决办法也是从网上搜集而来,把零零碎碎的整理记录一下. 服务器是:Alibaba Cloud Linux 下载安装 mongodb官网下载实在是太 ...