记录编号 72174 评测结果 AAAAAAAAAA
题目名称 游历校园 最终得分 100
用户昵称 Gravatar饺子 是否通过 通过
代码语言 C++ 运行时间 0.937 s
提交时间 2013-10-15 21:49:30 内存使用 16.43 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int lim=100011;
const int len=500055;
struct self{int x,y;}s[len*2];
int first[len*2],nxt[len*2];
int num[lim];
int m,n;
int tempn;
bool flag[lim]={0};
int z=0,a,ans;

int head,tail;
int q[lim];

void bfs(int i)
{
    head=tail=1;
    q[1]=i;
    int tot=0;
    if(num[i]%2==1)tot++;
    while(head<=tail)
    {
        for(int e=first[q[head]];e!=-1;e=nxt[e])
        {
            if(!flag[s[e].y])
            {
                flag[s[e].y]=1;
                tail++;
                q[tail]=s[e].y;
                if(num[s[e].y]%2==1)tot++;
            }
        }
        head++;
    }
    if(tot>2)z=z+(tot-2)/2;
}
        
        

int main()
{
    freopen("sent.in","r",stdin);freopen("sent.out","w",stdout);
    memset(first,-1,sizeof(first));
    memset(nxt,-1,sizeof(nxt));
    scanf("%d%d",&m,&n);
    for(a=1;a<=n;a++)
    {
        scanf("%d%d",&s[a].x,&s[a].y);
        if(s[a].x==s[a].y)continue;
        s[a+n].x=s[a].y;s[a+n].y=s[a].x;
        nxt[a]=first[s[a].x];first[s[a].x]=a;
        nxt[a+n]=first[s[a].y];first[s[a].y]=a+n;
        num[s[a].x]++;num[s[a].y]++;
    }
    for(a=1;a<=m;a++)
    if(!flag[a]&&num[a]>=1)
    {
        //cout<<"a="<<a;
        flag[a]=1;
        bfs(a);
        z++;
        //cout<<" z="<<z<<endl;
    }
    z--;
    cout<<z<<'\n';
    return 0;
}