比赛 |
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();
}