分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

BZOJ 1015 [JSOI2008]星球大战starwar

发布时间:2023-09-06 01:13责任编辑:傅花花关键词:暂无标签

今天效率终极无敌低。

一开始没读懂题。给你一张图,每次删除一个点和该点连出的边,问每次删除后未被删除的点构成的图的连通块的个数。

考虑倒着做,先把所有点删完,每次往图中加点,并查集维护连通块,每加进一个点ans++,然后找它的边,若是连出的点和它不在同一个并查集中,合并,ans--;

第一次找连通块的时候我暴力合并然后把所有并查集的代表元拿出来去了个重,一开始忘排序了wa成zz。。。。

//Twenty#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include<vector>typedef long long LL;const int maxn=200000*2;using namespace std;int n,m,sz,fa[maxn],fir[maxn],nxt[maxn],to[maxn],q[maxn],k,ecnt,no[maxn],que[maxn],ans[maxn];void add(int u,int v) { ???nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; ???nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;}int find(int x) {return x==fa[x]?x:fa[x]=find(fa[x]);}void init() { ???scanf("%d%d",&n,&m); ???for(int i=1;i<=m;i++) { ???????int u,v; ???????scanf("%d%d",&u,&v); ???????add(u,v); ???} ???scanf("%d",&k); ???for(int i=1;i<=k;i++) { ???????scanf("%d",&q[i]); ???????no[q[i]]=1; ???}}void work() { ???int now=0; ???for(int i=0;i<n;i++) fa[i]=i; ???for(int i=0;i<n;i++) if(!no[i]){ ???????for(int j=fir[i];j;j=nxt[j]) if(!no[to[j]]) { ???????????int u=find(i),v=find(to[j]); ???????????if(u!=v) { ???????????????fa[v]=u; ???????????} ???????} ???} ???for(int i=0;i<n;i++) if(!no[i]){ ????????int u=find(i); ????????que[++sz]=u; ???} ???sort(que+1,que+sz+1); ????int tpsz=0; ???for(int i=1;i<=sz;i++) { ????????if(i==1||que[i]!=que[i-1]) tpsz++; ???} ???sz=tpsz; now=sz; ???ans[k]=sz; ???for(int i=k;i>=1;i--) { ???????no[q[i]]=0; now++; ???????for(int j=fir[q[i]];j;j=nxt[j]) if(!no[to[j]]){ ??????????int u=find(q[i]),v=find(to[j]); ??????????if(u!=v) { ??????????????now--; ??????????????fa[u]=v; ??????????} ????????} ???????ans[i-1]=now; ???} ???for(int i=0;i<=k;i++) printf("%d\n",ans[i]); ???}int main(){ ???init(); ???work(); ???return 0;}
View Code

BZOJ 1015 [JSOI2008]星球大战starwar

原文地址:http://www.cnblogs.com/Achenchen/p/7581901.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved