比赛 |
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;
}