圆圈游戏(扫描线-圆的包含关系) (三)

2014-11-24 01:07:57 · 作者: · 浏览: 12
t::iterator it=T.begin();it!=T.end();it++) cout<< (it->no) <<" ";cout< }
else T.erase(node(ask[i].no,0)),T.erase(node(ask[i].no,1));
}
}
//change
int edge[MAXN],pre[MAXN]={0},next[MAXN]={0},size=0;
void addedge(int u,int v)
{
edge[++size]=v;
next[size]=pre[u];
pre[u]=size;
}
struct st_el
{
int no,ans,fa,nowp,nowv;
st_el(){no=ans=fa=nowv=0;nowp=pre[no];}
st_el(int _no,int _fa):no(_no),fa(_fa){ans=nowv=0;nowp=pre[no];}
}st[MAXN];
int st_dfs(int u) //经证明,dfs不是导致栈溢的理由
{
st[1]=st_el(u,0);
int size=1;
while (size)
{
int now=st[size].no;
bool flag=0;
if (st[size].nowv) st[size].ans+=st[size+1].ans;
for(;st[size].nowp;st[size].nowp=next[st[size].nowp])
{
int v=edge[st[size].nowp];
st[size].nowv=v;
if (v^st[size].fa)
{
st[size].nowp=next[st[size].nowp];
st[++size]=st_el(v,now);
// cout<<"add "< flag=1;
break;
}
}
if (!flag)
{
st[size].ans=max(st[size].ans,a[st[size].no].w);
a[st[size].no].ans=st[size].ans;
size--;
// cout<<"ers "< }
}
return a[u].ans;
}
int dfs(int u,int fa,int dep)
{
int ans=0;
Forp(u)
{
int &v=edge[p];
if (v^fa)
{
ans+=dfs(v,u,dep+1);
}
}
return max(a[u].w,ans);
}
int main()
{
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
scanf("%d",&n);
For(i,n) scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].r,&a[i].w),a[i].fa=i,a[i].dis=0;
// make_map1();
// For(i,n) cout< make_map2();
// For(i,n) cout< For(i,n) if (a[i].fa^i) addedge(a[i].fa,i),addedge(i,a[i].fa);
// For(i,n) cout<

long long ans=0;
// For(i,n) if (a[i].fa==i) ans+=dfs(i,0,0);
For(i,n) if (a[i].fa==i) /*cout<

cout<

return 0;
}