求助,第四个点RE
  • 板块P2713 罗马游戏
  • 楼主az__eg
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/14 13:59
  • 上次更新2023/10/27 20:24:49
查看原帖
求助,第四个点RE
229801
az__eg楼主2022/7/14 13:59

不知道为什么,数组应该没有越界

#include<cstdio>
#include<iostream>
#include<bits/extc++.h>
//#define ts printf("PASS\n")
using namespace std;
struct node
{
	int id;
	int value;
	bool operator < (const node &a)const
	{
		return value>a.value;
	}
};
__gnu_pbds::priority_queue<node> q[2000001];
bool death[2000001];
int score[2000001];
int pointed[2000001];
int n,m;
int find(int x)
{
	if(pointed[x]!=x)
	{
		pointed[x] = find(pointed[x]);
	}
	return pointed[x];
}
int main()
{
	int i,j;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		node soilder;
		cin>>soilder.value;
		soilder.id = i;
		q[i].push(soilder);
        pointed[i] = i;
	}
	cin>>m;
	for(i=1;i<=m;i++)
	{
   // ts;
		char str;
		cin>>str;
      //  ts;
		if(str=='K')
		{
    //    ts;
			int x;
			cin>>x;
			if(death[x])
			{
         //   ts;
				printf("0\n");
			}
			else
			{
           // ts;
				int px = find(x);
           //     ts;
            //    printf("%d\n",px);
				node top = q[px].top();
				printf("%d\n",top.value);
				death[top.id] = true;
				q[px].pop();
			}
		}
		else
		{
			int a,b;
			cin>>a>>b;
			if((death[a]||death[b])||a==b)
			{
				continue;
			}
			else
			{
				int pa = find(a);
				int pb = find(b);
				q[pa].join(q[pb]);
				pointed[pb] = pointed[pa]; 
			}
		}
	}
}
2022/7/14 13:59
加载中...