50 likes | 172 Views
题目讲解. 1. 浏览器. 手动模拟栈的操作. 集合. 并查集的变化 新开节点来表示单个元素的移动. if(find(now[x])==find(now[y]))continue; id=find(now[x]); cnt[id]--; sum[id]-=x; now[x]=++n; set[n]=n; cnt[n]=1; sum[n]=x; U(now[x],now[y]);. 洗澡. 用堆(优先队列)维护洗澡间的使用情况. for(int i=0; i<n; i++) { int y; scanf("%d",&y);
E N D
题目讲解 1
浏览器 手动模拟栈的操作
集合 并查集的变化 新开节点来表示单个元素的移动 if(find(now[x])==find(now[y]))continue; id=find(now[x]); cnt[id]--; sum[id]-=x; now[x]=++n; set[n]=n; cnt[n]=1; sum[n]=x; U(now[x],now[y]);
洗澡 用堆(优先队列)维护洗澡间的使用情况 for(int i=0; i<n; i++) { int y; scanf("%d",&y); int p=q.top(); q.pop(); q.push(p+y); } if(q.top()>600) printf("-1\n"); else printf("%d\n",q.top());