WA 95pts求调
  • 板块P4971 断罪者
  • 楼主YL_billow
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/30 11:23
  • 上次更新2024/10/30 16:52:25
查看原帖
WA 95pts求调
765961
YL_billow楼主2024/10/30 11:23

提交记录

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e6+5;

struct TREE{int dis,ls,rs,fa,val;}tree[N];
int find(int x){return tree[x].fa=(tree[x].fa^x)?find(tree[x].fa):x;}
#define ls tree[x].ls
#define rs tree[x].rs
int merge(int x,int y)
{
	if(x==y||!x||!y) return x|y;
	if(tree[x].val<tree[y].val||(tree[x].val==tree[y].val&&x>y)) swap(x,y);
	rs=merge(rs,y);
	if(tree[ls].dis<tree[rs].dis) swap(ls,rs);
	tree[x].dis=tree[rs].dis+1;
	return tree[ls].fa=tree[rs].fa=tree[x].fa=x;
}
void push_up(int x)
{
	if(!x) return ;
	if(tree[ls].dis<tree[rs].dis) swap(ls,rs);
	if(tree[x].dis!=tree[rs].dis+1)
	{
		tree[x].dis=tree[rs].dis+1;
		push_up(tree[x].fa);
	}
}
inline void update(int x,int w)
{
	tree[x].val=w;
	int q=tree[ls].fa=ls,p=tree[rs].fa=rs;
	tree[x].dis=1;ls=rs=0;push_up(tree[x].fa);
	merge(find(x),merge(p,q));
}
#undef ls
#undef rs

int t,w,k;
int n,m;
ll res;int mx;

inline int read(int &x);
int main()
{
	read(t);read(w);read(k);
	while(t--)
	{
		read(n);read(m);
		for(int i=1;i<=n;++i){read(tree[i].val);tree[i].ls=tree[i].rs=0;tree[i].fa=i;tree[i].dis=1;}
		int opt,a,b;
		for(int i=1;i<=m;++i)
		{
			read(opt);
			if(opt==2){read(a);update(a,0);}
			else if(opt==3){read(a);read(b);a=find(a);update(a,tree[a].val-b);}
			else{read(a);read(b);a=find(a);b=find(b);if(a^b) merge(a,b);}
		}
		res=mx=0;
		for(int i=1;i<=n;++i)
			if(tree[i].fa==i&&tree[i].val>0) res+=tree[i].val,mx=max(tree[i].val,mx);
		if(w==2) res-=mx;
		else if(w==3) res+=mx;
		if(!res) printf("Gensokyo");
		else if(res>k) printf("Hell");
		else printf("Heaven");
		printf(" %lld\n",res);
	}
	return 0;
}

inline int read(int &x)
{
	char ch=getchar();x=0;
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x;
}
2024/10/30 11:23
加载中...