zoukankan      html  css  js  c++  java
  • bzoj1015

    倒着做,正着做是要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
    ",ans[i]);
      return 0;
    }
    View Code
  • 相关阅读:
    1039 到底买不买 (20分)
    流密码
    Socket网络编程:互相通讯
    1036 跟奥巴马一起编程
    1033 旧键盘打字
    1029 旧键盘
    1015 德才论 (25分)
    BUU_Real_刷题记录
    vue3 composition api 对比 react hooks
    vue3 文档相关
  • 原文地址:https://www.cnblogs.com/new-hand/p/12mango.html
Copyright © 2011-2022 走看看