玄学RE求助TAT
查看原帖
玄学RE求助TAT
231949
45645A楼主2020/6/21 09:05

第1,3,4,5个点RE

#include <bits/stdc++.h>
#define bt bitset<1010>
#define lc k<<1
#define rc k<<1|1
using namespace std;
const int N=510;
const int Q=1010;
bt dis[N];
struct xxj{
	bt p[1010];
	void ins(bt val)
	{
		for(int i=999;i>=0;i--)
			if(val[i])
			{
				if(!p[i].count()) p[i]=val;
				val^=p[i];
				if(!val.count()) return;
			}
	}
	bt qry()
	{
		bt val=0;
		for(int i=999;i>=0;i--)
			if(!val[i]) val^=p[i];
		return val;
	}
}glb;
int h[N],e_num=1,vis[N];
struct Edge{
	int nxt,to;bt dis;
	Edge(int a=0,int b=0,bt c=0){ nxt=a,to=b,dis=c; }
}qe[Q<<1],e[Q<<1];
void add(int from,int to,bt dis)
{
	e[++e_num]=(Edge){h[from],to,dis};
	h[from]=e_num;
}
void dfs(int u,int pre,bt wi)
{
	vis[u]=1,dis[u]=wi;
	for(int i=h[u];i;i=e[i].nxt)
	{
		if((i^pre)==1) continue;	
		int v=e[i].to;
		if(vis[v]) glb.ins(dis[u]^dis[v]^e[i].dis);
		else dfs(v,i,wi^e[i].dis);
	}
}
int l[Q<<1],r[Q<<1],id[Q];
vector<Edge>op[6060];
void modify(int k,int l,int r,int x,int y,Edge ei)
{
	if(l>=x&&r<=y) 
	{
		op[k].push_back(ei);
		return;
	}
	if(l>y||r<x) return;
	int mid=l+r>>1;
	modify(lc,l,mid,x,y,ei);
	modify(rc,mid+1,r,x,y,ei);
}
void out(bt x)
{
	int i=999;
	while(i&&!x[i]) i--;
	while(i>=0) cout<<x[i],i--;
	cout<<"\n";
}
void query(int k,int l,int r,xxj now)
{
	for(int i=0;i<op[k].size();i++)
	{
		Edge ei=op[k][i];
		now.ins(dis[ei.nxt]^dis[ei.to]^ei.dis);
	}
	if(l==r){
		out(now.qry());
		return;
	}
	int mid=l+r>>1;
	query(lc,l,mid,now);query(rc,mid+1,r,now);
}
char s[10];
int main()
{
	int n,m,P,u,v;bt w;
	cin>>n>>m>>P;
	for(int i=1;i<=m;i++) 
	{
		cin>>u>>v>>w;
		add(u,v,w);add(v,u,w);
	}
	dfs(1,0,0);
	out(glb.qry());
	int etot=0,rnm=0;
	for(int i=1;i<=P;i++)
	{
		cin>>s+1>>u;
		switch(s[2])
		{
			case 'd':cin>>v>>w;qe[++etot]=Edge(u,v,w);l[etot]=i;id[++rnm]=etot;break;
			case 'a':r[id[u]]=i-1;break;
			case 'h':cin>>w;qe[++etot]=qe[id[u]];r[id[u]]=i-1;l[etot]=i;qe[etot].dis=w;id[u]=etot;break;
		}
	}
	for(int i=1;i<=etot;i++) if(!r[i]) r[i]=P;
	for(int i=1;i<=etot;i++) if(l[i]<=r[i]) modify(1,1,P,l[i],r[i],qe[i]);
	query(1,1,P,glb);
	return 0;
}
2020/6/21 09:05
加载中...