3 3 1 2 2 3 1 3 4 2 1 2 3 4
1 2HintNew ~~~ 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.
#include <stdio.h>
#include <string.h>
#define SIZE 100100
int f[SIZE] , deg[SIZE] , ver[SIZE] ;
bool vis[SIZE] ;
int n , m ;
int find(int pos)
{
int r = pos ;
while(r != f[r])
r = f[r] ;
int temp ;
while(pos != r)
{
temp = f[pos] ;
f[pos] = r ;
pos = temp ;
}
return r ;
}
void init()
{
for(int i = 0 ; i <= n ; ++i)
{
f[i] = i ;
}
memset(deg,0,sizeof(deg)) ;
memset(ver,0,sizeof(ver)) ;
memset(vis,false,sizeof(vis)) ;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init() ;
for(int i = 0 ; i < m ; ++i)
{
int x, y ;
scanf("%d%d",&x,&y) ;
int fx = find(x) , fy = find(y) ;
deg[x]++ , deg[y]++ ;
if(fx!=fy)
{
f[fx] = fy ;
}
}
bool flag = true ;
for(int i = 1 ; i<= n ; ++i)
{
int fx = find(i) ;
if(deg[i]%2 == 1)
{
ver[fx]++ ;
}
}
int cnt = 0 ;
for(int i = 1 ; i <= n ; ++i)
{
if(deg[i] == 0)
continue ;
int fx = find(i) ;
if(!vis[fx])
{
vis[fx] = true ;
if(!ver[fx])
cnt ++ ;
else
cnt+=ver[fx]/2 ;
}
}
printf("%d\n",cnt) ;
}
} hdu 3018 Ant Trip 算是一道欧拉通路的题目吧~
原文地址:http://blog.csdn.net/lionel_d/article/details/45307741