60pts,RE求调
查看原帖
60pts,RE求调
1432988
Yeonjun_0913楼主2024/12/4 21:03
#include <iostream>
#include <climits>
using namespace std;

struct edge{
    int nxt,to;
};
int n,m,Max,Min,a,b;
int head[100005],tot;
bool vis[100005];
edge g[200005];
void add(int u,int v){
    g[++tot].to=v;
    g[tot].nxt=head[u];
    head[u]=tot;
    g[++tot].to=u;
    g[tot].nxt=head[v];
    head[v]=tot;
}
void dfs(int u,bool f){
    if (f) a++;
    else b++;
    for (int i=head[u];i;i=g[i].nxt){
        if (vis[g[i].to]) continue;
        vis[g[i].to]=true;
        dfs(g[i].to,!f);
    }
}

int main (){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i=1,u,v;i<=m;i++){
        cin >> u >> v;
        add(u,v);
    }
    for (int i=1;i<=n;i++){
        a=b=0;
        if (!vis[i]){
            vis[i]=true;
            dfs(i,0);
            Max+=max(a,b),Min+=min(a,b);
        }
    }
    cout << Min << ' ' << Max;
    return 0;
}
2024/12/4 21:03
加载中...