求教!!!hdu1054 为什们会出现Runtime Error (ACCESS_VIOLATION)
/*
Author: Leo.W
Descriptipn: 给定一个树形的地图,用最少的树节点使得能够控制【即所有结点都能一个被占据的结点相连】全树。
How to Do: 建立结构体,对输入的信息,记录子树的个数及序号,初始选中为false
对未选中的树群中选出相邻未选中树最多的树节点,进行操作;从未选中的树中删去已选中的树;
*/
#include <iostream>
using namespace std;
#define MAXSIZE 1510
struct node{
int lenth;//初始状态下相邻树节点的数量
int dynamicLenth;//动态变化的相邻未选中的树节点的数量
int num[MAXSIZE];//存相邻树节点的序号
bool chose;//表明此树节点是否已处于监视范围
bool olo;
};
node treeNode[MAXSIZE];
int main(){
//freopen("in.txt","r",stdin);
int n;
while(scanf("%d",&n)!=EOF){
int i,j;
for(i=0;i<MAXSIZE;i++){//初始树节点的状态
treeNode[i].chose=false;//未选中
treeNode[i].olo=false;
treeNode[i].lenth=0;//相邻树节点为零
}
for(i=0;i<n;i++){
int nodeNo,nodeNum;
scanf("%d:(%d)",&nodeNo,&nodeNum);
treeNode[nodeNo].olo=true;
treeNode[nodeNo].lenth+=nodeNum;//相邻树节点
treeNode[nodeNo].dynamicLenth=treeNode[nodeNo].lenth;
for(j=0;j<nodeNum;j++){
int temp;scanf("%d",&temp);
treeNode[nodeNo].num[j]=temp;
treeNode[temp].lenth++;
treeNode[temp].dynamicLenth=treeNode[temp].lenth;
}
}
int sum=n;
int occupy=0;
while(sum){
int maxs=-1,pos=-1;
for(i=0;i<MAXSIZE;i++){//对未选中的树节点比较其相邻未选中树节点的数目,取最大者
if(!treeNode[i].chose&&treeNode[i].olo&&treeNode[i].dynamicLenth>maxs){
maxs=treeNode[i].dynamicLenth; pos=i;
}
}
sum--;//选中一个总数减一个
treeNode[pos].chose=true;//将选中的树节点涂黑
for(i=0;i<treeNode[pos].lenth;i++){//将选中的树节点周围未选中的树节点选中
int temp=treeNode[pos].num[i];
if(!treeNode[temp].chose){
sum--;//选中一个总数减一个
treeNode[temp].chose=true;
for(j=0;j<treeNode[temp].lenth;j++){//将其相邻的未选中的树节点的相邻未选中点数量减一
int temp2=treeNode[temp].num[j];
if(!treeNode[temp2].chose) treeNode[temp2].dynamicLenth--;
}
}
}
occupy++;//占领树节点数加一
}
printf("%d\n",occupy);
}
return 0;
}