码迷,mamicode.com
首页 > Web开发 > 详细

JSOI2008星球大战(并查集)

时间:2014-06-02 11:06:31      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:des   c   style   class   blog   code   

膜拜HZWER大牛的编码能力!

附上他的代码(我的代码不知为何一直莫名出错……)

bubuko.com,布布扣
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int tot,n,m,d,father[400001],head[400001],q[400001],ans[400001],cnt=1;
bool used[400001],des[400001];
struct data{int to,next;}e[400001];
int find(int x){return x==father[x]?x:father[x]=find(father[x]);}
void ins(int u,int v)
{
     cnt++;e[cnt].to=v;e[cnt].next=head[u];head[u]=cnt;
     cnt++;e[cnt].to=u;e[cnt].next=head[v];head[v]=cnt;
 }
void add(int x)
{
    int i=head[x],p=find(x),q;
    while(i)
    {
        if(used[e[i].to])
        {
             q=find(e[i].to);
             if(p!=q){father[q]=p;tot--;}
        }
        i=e[i].next;
            } 
 }
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)father[i]=i;
    for(int i=1;i<=m;i++)
    {
            int x,y;
            scanf("%d%d",&x,&y);
            ins(x,y);
            }
    scanf("%d",&d);
    for(int i=1;i<=d;i++)
    {
            scanf("%d",&q[i]);
            des[q[i]]=1; 
            }
    for(int i=0;i<n;i++)
    {
        if(!des[i])
        {
                   tot++;
                   add(i);
                   used[i]=1;
        }
    }
    ans[d+1]=tot;
    for(int i=d;i>0;i--)
    {
            tot++;
            add(q[i]);
            used[q[i]]=1;
            ans[i]=tot;
            }
    for(int i=1;i<=d+1;i++)printf("%d\n",ans[i]);
    return 0;
}
bubuko.com,布布扣

 

JSOI2008星球大战(并查集),布布扣,bubuko.com

JSOI2008星球大战(并查集)

标签:des   c   style   class   blog   code   

原文地址:http://www.cnblogs.com/zyfzyf/p/3764064.html

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