二分图
2025-12-08 19:29:49
发布于:上海
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
const int maxn = 1e5 + 15;
vector<int> mp[maxn];
int n,m,ans1,ans2;
bool vis[maxn];
void input(){
cin >> n >> m;
while(m--){
int x,y;
cin >> x >> y;
mp[x].push_back(y);
mp[y].push_back(x);
}
}
void dfs(int r,int &sum1,int &sum2,bool flag){
if(vis[r]) return ;
vis[r] = 1;
(flag ? sum1 : sum2);
for(auto next : mp[r]){
if(vis[next] == 0) dfs(next,sum1,sum2,!flag);
}
}
int main(){
//freopen("测试数据#7.in","r",stdin);
input();
for(int i = 1;i <= n;i){
if(vis[i] == 0){
int sum1 = 0,sum2 = 0;
dfs(i,sum1,sum2,1);
ans1 += max(sum1,sum2),ans2 += min(sum1,sum2);
}
}
cout << min(ans1,ans2) << " " << max(ans1,ans2);
//fclose(stdin);
return 0;
}
这里空空如也







有帮助,赞一个