hdu-3018 Ant Trip(欧拉路径)

题目链接:

Ant Trip

Time Limit: 2000/1000 MS (Java/Others)   

 Memory Limit: 32768/32768 K (Java/Others)

Problem Description

Ant Country consist of N towns.There are M roads connecting the towns.

Ant Tony,together with his friends,wants to go through every part of the country.

They intend to visit every road , and every road must be visited for exact one time.However,it may be a mission impossible for only one group of people.So they are trying to divide all the people into several groups,and each may start at different town.Now tony wants to know what is the least groups of ants that needs to form to achieve their goal.

Input

Input contains multiple cases.Test cases are separated by several blank lines. Each test case starts with two integer N(1<=N<=100000),M(0<=M<=200000),indicating that there are N towns and M roads in Ant Country.Followed by M lines,each line contains two integers a,b,(1<=a,b<=N) indicating that there is a road connecting town a and town b.No two roads will be the same,and there is no road connecting the same town.

Output

For each test case ,output the least groups that needs to form to achieve their goal.

Sample Input

3 3

1 2

2 3

1 3

4 2

1 2

3 4

Sample Output

1

2

Hint

New ~~~ Notice: if there are no road connecting one town ,tony may forget about the town.
In sample 1,tony and his friends just form one group,they can start at either town 1,2,or 3.
In sample 2,tony and his friends must form two group.

题意:

就是给你无向图,问多少笔能把这些边都画完,所以孤立的点不用管;

思路:

NND ,一开始bfs写的有问题,我还以为有什么WA点,就在网上找题解,我擦,TMD全都是并查集,而且代码都一样,真想说一句去他大爷的;

最后发现vis的位置不能乱放;

bfs找到的一个连通块中,如果是一个欧拉回路ans+1,如果里面有奇度的点,那么肯定是成对出现的,因为一条边对应两个点的度,那么一次可以选一对奇度的点为起始点和终止点,那么这个连通块的答案就是这个连通块中奇度点的个数/2;

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
const ll mod=1e9+7;
int n,m,vis[N],ind[N],u,v;
vector<int>ve[N];
queue<int>qu;
int bfs(int num)
{
    int cnt=0;
    qu.push(num);
    vis[num]=1;
    while(!qu.empty())
    {
        int fr=qu.front();
        qu.pop();
        if(ind[fr]%2==1)cnt++;
        int len=ve[fr].size();
        for(int i=0;i<len;i++)
        {
            int y=ve[fr][i];
            if(!vis[y])
            {
                vis[y]=1;
                qu.push(y);
            }
        }
    }
    return cnt;
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i=0;i<=n;i++)
        {
            ind[i]=vis[i]=0;
            ve[i].clear();
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&u,&v);
            ve[u].push_back(v);
            ve[v].push_back(u);
            ind[u]++;
            ind[v]++;
        }
        for(int i=1;i<=n;i++)
        {
            if(ind[i]==0)vis[i]=1;
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i])
            {
                int s=bfs(i);
                if(s==0)ans++;
                else ans+=s/2;
            }
        }
        printf("%d\n",ans);

    }
   return 0;
}
时间: 2024-08-24 08:10:22

hdu-3018 Ant Trip(欧拉路径)的相关文章

[欧拉回路] hdu 3018 Ant Trip

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1658    Accepted Submission(s): 641 Problem Description Ant Country consist of N to

hdu 3018 Ant Trip 欧拉回路+并查集

Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Ant Country consist of N towns.There are M roads connecting the towns. Ant Tony,together with his friends,wants to go through every part

hdu 3018 Ant Trip 算是一道欧拉通路的题目吧~

Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1826    Accepted Submission(s): 702 Problem Description Ant Country consist of N towns.There are M roads connecting the towns. Ant Tony,

HDU 3018 Ant Trip (欧拉路的个数 并查集)

Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5501    Accepted Submission(s): 2146 Problem Description Ant Country consist of N towns.There are M roads connecting the towns. Ant Tony,

hdu 3018 Ant Trip

并查集+欧拉回路 对于每个连通的集合,如果该集合只有一个元素 那么不用管,如果该集合大于一个元素,那么求出奇度的个数,如果奇度个数是0,那么ans+1,否则ans+sum/2,sum为该集合内奇度的个数. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; const int max

hdoj 3018 Ant Trip(无向图欧拉路||一笔画+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 思路分析:题目可以看做一笔画问题,求最少画多少笔可以把所有的边画一次并且只画一次: 首先可以求出该无向图中连通图的个数,在每个无向连通图中求出需要画的笔数再相加即为所求.在一个无向连通图中,如果所有的点的度数为偶数则存在一个欧拉回路, 则只需要画一笔即可:如果图中存在度数为奇数的点,则需要画的笔数为度数为奇数的点的个数 /2:需要注意的孤立的点不需要画: 代码如下: #include <cst

HDU 3018 欧拉回路

HDU - 3018 Ant Country consist of N towns.There are M roads connecting the towns. Ant Tony,together with his friends,wants to go through every part of the country. They intend to visit every road , and every road must be visited for exact one time.Ho

Ant Trip(欧拉回路+并查集)

Ant Trip 题目描述 原题来自:2009 Multi-University Training Contest 12 - Host by FZU 给你无向图的 N 个点和 M 条边,保证这 M 条边都不同且不会存在同一点的自环边,现在问你至少要几笔才能所有边都画一遍.(一笔画的时候笔不离开纸) 输入格式 多组数据,每组数据用空行隔开. 对于每组数据,第一行两个整数 N,M表示点数和边数.接下去 M 行每行两个整数 a,b,表示 a,b 之间有一条边. 输出格式 对于每组数据,输出答案. 样例

HDU3018:Ant Trip(欧拉回路)

Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2461    Accepted Submission(s): 965 Problem Description Ant Country consist of N towns.There are M roads connecting the towns. Ant Tony,t