比赛 20111109 评测结果 WEEEEWEEWE
题目名称 游历校园 最终得分 0
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-09 09:30:59
显示代码纯文本
#include <fstream>

#define I_F "sent.in"
#define O_F "sent.out"

const long MAXn=100000;

struct lb
{
	long x;
	lb *next;
}*map[MAXn]={NULL};

long n;
bool s[MAXn]={false};
bool f[MAXn]={false};
long l,ans;

void Addedge(const long, const long);
void Input();
void Paint(const long);
void Getl();
void Search();
void Output();

int main()
{
	Input();
	Getl();
	Search();
	Output();
	return 0;
}

void Addedge(const long a, const long b)
{
	lb *t=map[a];
	map[a]=new lb;
	map[a]->x=b;
	map[a]->next=t;
	t=map[b];
	map[b]=new lb;
	map[b]->x=a;
	map[b]->next=t;
}

void Input()
{
	std::ifstream fin(I_F);
	fin>>n;
	long a,b;
	for (long i=0; i<n; i++)
	{
		fin>>a>>b;
		a--;
		b--;
		Addedge(a,b);
		s[a]=!s[a];
		s[b]=!s[b];
	}
	fin.close();
}

void Paint(const long x)
{
	f[x]=true;
	for (lb *t=map[x]; t!=NULL; t=t->next)
		if (!f[t->x])
			Paint(t->x);
}

void Getl()
{
	l=0;
	for (long i=0; i<n; i++)
		if (!f[i])
			l++,
			Paint(i);
}

void Search()
{
	ans=0;
	for (long i=0; i<n; i++)
		if (s[i])
			ans++;
	ans/=2;
	if (ans>0)
		ans--;
	ans+=(l-1);
}

void Output()
{
	std::ofstream fout(O_F);
	fout<<ans<<std::endl;
	fout.close();
}