[最大独立集]JZOJ 5394 列队
分析
这题我们发现如果不好惹的同学选了行hack就不能列hack,这个是不是很像二分图匹配呢~(个鬼,想到的是2-sat)
咳咳,那么这个其实看了一会儿会发现就是一个最大独立集问题,行向列连个边就好了,跑下匈牙利就好了
最大独立集数=点数-最大匹配数
#include <iostream> #include <cstdio> #include <memory.h> using namespace std; const int N=1e3+10; int connect[N]; bool visit[N],to[N][N]; int n,m,ans; bool XYL(int u) { if (visit[u]) return 0; visit[u]=1; for (int i=1;i<=n;i++) if (to[u][i]&&(!connect[i]||XYL(connect[i]))) { connect[i]=u; return 1; } return 0; } int main() { freopen("phalanx.in","r",stdin); freopen("phalanx.out","w",stdout); scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); to[x][y]=1; } ans=n*2; for (int i=1;i<=n;i++) { memset(visit,0,sizeof visit); ans-=XYL(i); } printf("%d",ans*n); }
在日渐沉没的世界里,我发现了你。