2 4 2 1 2 2 3 4 4 1 2 1 4 2 3 3 4
2 0
#define N 10005
#define M 100005
#define maxn 205
#define MOD 1000000007
int n,m,a,b,c,vis[N],ans[N][2],T;
vector<int> p[N];
bitset<N> sum;
void DFS(int f,int root){
FI(p[f].size()){
int v = p[f][i];
if(vis[v] == -1){
vis[v] = 1 - vis[f];
ans[root][vis[v]]++;
DFS(v,root);
}
}
}
int main()
{
while(S(T)!=EOF)
{
while(T--){
S2(n,m);
FI(n) p[i+1].clear();
FI(m){
scan_d(a);scan_d(b);
p[a].push_back(b);
p[b].push_back(a);
}
memset(vis,-1,sizeof(vis));
fill(ans,0);
for(int i = 0;i<= n;i++) sum[i] = 0;
sum[0] = 1;
for(int i= 1;i<=n;i++){
if(vis[i] == -1){
vis[i] = 0;ans[i][vis[i]]++;
DFS(i,i);//cout<<ans[i][0]<<" i "<<ans[i][1]<<endl;
sum|= ( sum << ans[i][0]) | ( sum << ans[i][1]);
}
}
int maxx = 0;
for(int i = n;i>=0;i--)
if(sum[i])
maxx = max(maxx,i * (n - i) - m);
printf("%d\n",maxx);
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu 5313 Bipartite Graph 完全二分图 深搜 bitset应用
原文:http://blog.csdn.net/mengzhengnan/article/details/47075693