码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1015

时间:2017-10-24 23:00:52      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:能力   ems   blog   span   code   har   ide   template   img   

倒着做,正着做是要GG的,每次将删的点加进去,反着存。代码能力太差了,改了好久,最后请教大佬发现智障问题

技术分享
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
const int maxn=400000+10;
const int maxm=200000+10;
struct hh
{
  int v,next;
}e[maxn];
int n,m,k,point,tot;
int q[maxn],head[maxn],fa[maxn],vis[maxn],del[maxn],ans[maxn];
template <class T> void read(T&x)
{
  x=0;char c=getchar();int f=0;
  while(c<0||c>9){f|=(c==-);c=getchar();}
  while(c>=0&&c<=9)x=(x<<3)+(x<<1)+(c^=48),c=getchar();
  x=f?-x:x;
}
int find(int v){return fa[v]==v?v:fa[v]=find(fa[v]);}
void add(int u,int v){e[++point].v=v;e[point].next=head[u];head[u]=point;}
void add2(int x)
{
  int i=head[x],q=find(x),p;
  while(i!=-1)
  {
      if(vis[e[i].v])
      {
        p=find(e[i].v);
        if(q!=p)fa[p]=q,tot--;
      }
      i=e[i].next;
  }
}
int main()
{
  memset(head,-1,sizeof(head));
  read(n);read(m);
  for(int i=0;i<n;i++)fa[i]=i;
  int u,v;
  for(int i=1;i<=m;i++)
  {
      read(u);read(v);
      add(u,v);add(v,u);
  }
  read(k);
  for(int i=1;i<=k;i++)
  {
    read(q[i]);
    del[q[i]]=1;
  }
  for(int i=0;i<n;i++)
  {
    if(!del[i])
    {
      tot++;
      add2(i);
      vis[i]=1;
    }
  }
  ans[k+1]=tot;
  for(int i=k;i>0;i--)
  {
    tot++;
    add2(q[i]);
    vis[q[i]]=1;
    ans[i]=tot;
  }
  for(int i=1;i<=k+1;i++)printf("%d\n",ans[i]);
  return 0;
}
View Code

 

bzoj1015

标签:能力   ems   blog   span   code   har   ide   template   img   

原文地址:http://www.cnblogs.com/new-hand/p/12mango.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!