标签:情况 span 偶数 需要 const 表示 双向 ++ 用例
1,如果一个强连通分量内的某些顶点在一个集圈内(即某些强通分量内含有奇圈),那么强连通分量中的其它顶点也在某个奇圈内。
第一个条件的证明:我们假设有一个奇圈,因为是点双,没有割点,必然有紧挨着的圈,假设这个是偶数圈,则,这个偶数圈必然能和原来的奇圈组成新的奇圈(因为:新的圈=(奇数圈-k)+(偶数圈-k)=奇数+偶数-偶数=奇数,k是共同边上的点数
2.如果一个双联通分量含有奇圈,着他必定不是一个二分图。反过来也成立,这是一个充要条件。
这样的话我们又可以转化成删掉多少条边后这个图就可以变成二分图。
#include<cstring> #include<cstdio> const int maxn=305; int n,m,test,aa[maxn],bb[maxn]; int main() { scanf("%d",&test); while(test--) { scanf("%d%d",&n,&m); for(int i=0;i<m;i++) scanf("%d%d",aa+i,bb+i); int ans=maxn; for(int i=0;i<(1<<n);i++) //2^n种情况,对于每一个星球都可以两种情况要么为左,要么为右 { int cnt=0; for(int j=0;j<m;j++) if(((i>>aa[j])%2)==((i>>bb[j])%2)) //属于同一个世界,说明呵呵存在奇数环 cnt++; if(ans>cnt) ans=cnt; } printf("%d\n",ans); } return 0; }
标签:情况 span 偶数 需要 const 表示 双向 ++ 用例
原文地址:http://www.cnblogs.com/z360/p/7436288.html