比赛 201001-line 评测结果 AWWWA
题目名称 可合并堆 最终得分 40
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-01-18 21:18:54
显示代码纯文本
#include <iostream>
#include <fstream>
using namespace std;
int x[1000][10000]={0};
int h[1000]={0};
bool y[1000]={false};
	ifstream f1("uheap.in");
	ofstream f2("uheap.out");

int makeheap(int n)
{
	y[n]=true;
	f2<<0<<endl;
	return 0;
}
int insert(int n,int k)
{
	if (y[n])
	{
	int i=1;
	while ((i<=h[n])&&(x[n][i]<k))
		i++;
	h[n]++;
	for (int j=h[n];j>i;j--)
		x[n][j]=x[n][j-1];
	x[n][i]=k;
	f2<<0<<endl;
	}
	else f2<<"insert error!"<<endl;
	return 0;
}
int del(int n)
{
	if (h[n])
	{
		f2<<x[n][1]<<endl;
		h[n]--;
		for (int i=1;i<=h[n];i++)
			x[n][i]=x[n][i+1];
	}
	else f2<<"extract error!"<<endl;
    return 0;
}

int uni(int n,int nn)
{
	if ((y[n])&&(y[nn]))
	{
		int t[10000];
		int ii=1,jj=1;
		for (int kk=1;kk<=h[n]+h[nn];kk++)
		{
			if ((ii=h[n]+1)||(x[n][ii]>x[nn][jj])) 
			{
				t[kk]=x[nn][jj];
				jj++;
			}
			else
			{
				t[kk]=x[nn][ii];
				ii++;
			}
		}
		h[n]=ii+jj;h[nn]=0;
		for (int kk=1;kk<=h[n];kk++)
		x[n][kk]=t[kk];
		f2<<0<<endl;
	}
	else f2<<"union error!"<<endl;
	return 0;
}

int main()
{

	
	int n,t,t1,t2;
	f1>>n;
	for (int i=1;i<=n;i++)
	{
		f1>>t;
		if (t==1)
		{
			f1>>t1;
			makeheap(t1);
		}
		if (t==2)
		{
			f1>>t1>>t2;
			insert(t1,t2);
		}
		if (t==3)
		{
			f1>>t1;
			del(t1);
		}
		if (t==4)
		{
			f1>>t1>>t2;
			uni(t1,t2);
		}
	}
	
	f1.close();
	f2.close();
	
	return 0;
}