• hdu 3118(二进制枚举)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3118

    思路:题目要求是去掉最少的边使得图中不存在路径长度为奇数的环,这个问题等价于在图中去掉若干条边,使得这个图成为二分图。注意到n不是很大,于是我们可以想到二进制枚举,枚举每条边的两个顶点是否在同一个集合中,若是,则删除这条边。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<vector>
     6 using namespace std;
     7 #define inf 1<<30
     8 vector<pair<int,int> >map;
     9 int n,m;
    10 
    11 int main()
    12 {
    13   //  freopen("1.txt","r",stdin);
    14     int _case,u,v,ans,count;
    15     scanf("%d",&_case);
    16     while(_case--){
    17         scanf("%d%d",&n,&m);
    18         map.clear();
    19         for(int i=0;i<m;i++){
    20             scanf("%d%d",&u,&v);
    21             map.push_back(make_pair(u,v));
    22         }
    23         ans=inf;
    24         for(int i=0;i<(1<<n);i++){
    25             count=0;
    26             for(int j=0;j<m;j++){
    27                 if(((i>>map[j].first)&1)==((i>>map[j].second)&1))
    28                     count++;
    29             }
    30             if(count<ans)ans=count;
    31         }
    32         printf("%d
    ",ans);
    33     }
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    软件测试培训第9天
    软件培训第8天
    软件测试培训第7天
    软件测试培训第5天
    软件测试培训第6天
    软件测试培训第4天
    软件测试培训第3天
    MySQL复杂用法
    MySQL的基本语法
    VM虚拟机上安装Redhat
  • 原文地址:https://www.cnblogs.com/wally/p/3141503.html
Copyright © 2020-2023  润新知