无奇数环:假设学生 A 选了课程 X,课程 X 被学生 B 选,学生 B 选了课程 Y,课程 Y 被学生 A 选,形成环 “学生 A→课程 X→学生 B→课程 Y→学生 A”,环的长度为 4(偶数),不存在奇数环(如 3 个顶点的环:学生 A→课程 X→学生 B→学生 A,这种情况不可能出现,因为学生之间没有边)。
#include<bits/stdc++.h>#define endl "\n"
#define int long long
usingnamespacestd;constintN=1e5+10;intn,m;vector<int>g[N];intcolor[N];inttot1,tot2;boolbfs(intx){queue<int>q;color[x]=1;tot1=1;tot2=0;q.push(x);while(!q.empty()){intt=q.front();q.pop();for(autov:g[t]){if(!color[v]){color[v]=color[t]%2+1;color[v]==1?tot1++:tot2++;q.push(v);}elseif(color[v]==color[t])returnfalse;}}returntrue;}intans;voidsolve(){cin>>n>>m;for(inti=1;i<=m;i++){intu,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}for(inti=1;i<=n;i++){if(color[i])continue;if(!bfs(i)){cout<<"Impossible"<<endl;return;}elseans+=min(tot1,tot2);}cout<<ans<<endl;}signedmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int_=1;//cin >> _;
while(_--){solve();}return0;}