洛谷 1330封鎖陽光大學(染色)
阿新 • • 發佈:2019-01-12
get了一個新事情:
exit(x)(x不為0)都表示異常退出
exit(0)表示正常退出
#include <bits/stdc++.h> #include <algorithm> #include <cstdio> #include <iostream> #include <vector> #include <cstdlib> #include<map> using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const long long int mod=1e9+7; vector<int>mp[100100]; int n,m,u,v; int sum,num,ans; int co[10010]; bool vis[10010]; void work(int x,int c) { num++; vis[x]=true; co[x]=c; if(c) sum++; for(int i=0;i<mp[x].size();i++) { if(vis[mp[x][i]]) { if(co[mp[x][i]]==co[x]) { printf("Impossible\n"); exit(0); } else continue; } work(mp[x][i],abs(c-1)); } } bool dfs() { for(int i=1;i<=n;i++) { sum=0;num=0; if(!vis[i]) { work(i,1); ans+=min(sum,num-sum); return true; } } return false; } int main() { memset(vis,false,sizeof(vis)); memset(co,-1,sizeof(co)); scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); mp[u].push_back(v); mp[v].push_back(u); } while(1) if(!dfs()) break; printf("%d\n",ans); return 0; }