zoukankan      html  css  js  c++  java
  • [Luogu3733][HAOI2017]八纵八横

    luogu

    sol

    线性基+线段树分治傻题。
    复杂度应该是(O((n+mlog n)frac{L^2}{omega}))

    code

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<bitset>
    using namespace std;
    const int N = 1005;
    #define ll bitset<N>
    int gi(){
    	int x=0,w=1;char ch=getchar();
    	while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    	if (ch=='-') w=0,ch=getchar();
    	while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    	return w?x:-x;
    }
    char s[N];
    ll gl(){
    	scanf("%s",s);int len=strlen(s);ll x;x.reset();
    	for (int i=0;i<len;++i) x[len-i-1]=s[i]-'0';return x;
    }
    void po(ll x){
    	int i=N-1;while (!x[i]) --i;
    	while (~i) putchar(x[i]+'0'),--i;puts("");
    }
    int n,m,q,to[N],nxt[N],head[N],cnt,fa[N],tot,id,pos[N];
    ll ww[N],dis[N];vector<int>v[N<<2];
    struct edge{int u,v,l,r;ll w;}E[N<<1];
    int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
    void link(int u,int v,ll w){
    	to[++cnt]=v;nxt[cnt]=head[u];ww[cnt]=w;head[u]=cnt;
    	to[++cnt]=u;nxt[cnt]=head[v];ww[cnt]=w;head[v]=cnt;
    }
    void dfs(int u,int f){
    	for (int e=head[u];e;e=nxt[e])
    		if (to[e]!=f) dis[to[e]]=dis[u]^ww[e],dfs(to[e],u);
    }
    void modify(int x,int l,int r,int ql,int qr,int i){
    	if (l>=ql&&r<=qr) {v[x].push_back(i);return;}
    	int mid=l+r>>1;
    	if (ql<=mid) modify(x<<1,l,mid,ql,qr,i);
    	if (qr>mid) modify(x<<1|1,mid+1,r,ql,qr,i);
    }
    struct xxj{
    	ll p[N];
    	void insert(ll x){
    		for (int i=N-1;~i;--i)
    			if (x[i]){
    				if (!p[i].any()) {p[i]=x;return;}
    				x^=p[i];
    			}
    	}
    	ll calc(){
    		ll x;x.reset();
    		for (int i=N-1;~i;--i)
    			if (!x[i]) x^=p[i];
    		return x;
    	}
    }tmp;
    void query(int x,int l,int r,xxj S){
    	for (auto i:v[x]) S.insert(dis[E[i].u]^dis[E[i].v]^E[i].w);
    	if (l==r) {po(S.calc());return;}int mid=l+r>>1;
    	query(x<<1,l,mid,S);query(x<<1|1,mid+1,r,S);
    }
    int main(){
    	n=gi();m=gi();q=gi();
    	for (int i=1;i<=n;++i) fa[i]=i;
    	for (int i=1;i<=m;++i){
    		int u=gi(),v=gi();ll w=gl();
    		if (find(u)^find(v)) link(u,v,w),fa[find(u)]=find(v);
    		else E[++tot]=(edge){u,v,0,q,w};
    	}
    	dfs(1,0);
    	for (int i=1;i<=q;++i){
    		scanf("%s",s);
    		if (s[0]=='A'){
    			int u=gi(),v=gi();ll w=gl();
    			E[++tot]=(edge){u,v,i,q,w};pos[++id]=tot;
    		}else if (s[1]=='h'){
    			int x=gi();ll w=gl();
    			E[pos[x]].r=i-1;E[++tot]=(edge){E[pos[x]].u,E[pos[x]].v,i,q,w};pos[x]=tot;
    		}else{
    			int x=gi();E[pos[x]].r=i-1;pos[x]=-1;
    		}
    	}
    	for (int i=1;i<=tot;++i) modify(1,0,q,E[i].l,E[i].r,i);
    	query(1,0,q,tmp);return 0;
    }
    
  • 相关阅读:
    HDU 1584 蜘蛛牌(DFS)
    HDU 1800 Flying to the Mars(贪心)
    zsh: command not found: java (xxx)
    Deepin20安装Mysql8
    Deepin全局菜单
    Ubuntu PPA 解读
    Node安装与配置
    Windows安装配置Maven
    idea 安装 Vue 插件没有Vue component选项
    Linux桌面系统创建应用程序快捷方式
  • 原文地址:https://www.cnblogs.com/zhoushuyu/p/9484339.html
Copyright © 2011-2022 走看看