原题P10378
本人极少使用vector,注释地方只能用于c++11,如果比赛环境该如何使用符合c++98的写法
#include<bits/stdc++.h>
const int maxn=1e5+10;
using namespace std;
int n,m;
int cnt1,cnt2,s1,s2;;
vector<int> e[maxn];
bool vis[maxn];
void dfs(int u,bool b){
vis[u]=1;
if(b) s1++;
else s2++;
for(int v:e[u]){
if(!vis[v]) dfs(v,s1,s2,!b);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
e[u].push_back(v); e[v].push_back(u);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
s1=0,s2=0;
dfs(i,0);
cnt1+=min(s1,s2);
cnt2+=max(s1,s2);
}
}
cout<<cnt1<<" "<<cnt2;
return 0;
}