zoukankan      html  css  js  c++  java
  • hdu 3118

    题意:删去最少的边,使图中不存在奇圈。

    分析:一开始想用BFS求出哪些点同时存在于两个集合再进行处理,发现行不通。但从数据的范围来看(N≤15,M≤300),这么少的数据可以直接枚举这些点分成两个集合的所有情况,最多2^15种,然后看看哪种情况删除的边数最少的就是答案。

    View Code
     1 #include<cstdio>
     2 int t,n,m;
     3 int matrix[16][16];
     4 int solve(int set)
     5 {
     6     int counter=0;
     7     for(int i=0;i<n;i++)
     8     {
     9         if((set&(1<<i))==0)
    10         {
    11             for(int j=0;j<n;j++)
    12             {
    13                 if((set&(1<<j))==0)
    14                     counter+=matrix[i][j];
    15             }
    16         }
    17     }
    18     for(int i=0;i<n;i++)
    19     {
    20         if((set&(1<<i))!=0)
    21         {
    22             for(int j=0;j<n;j++)
    23             {
    24                 if((set&(1<<j))!=0)
    25                     counter+=matrix[i][j];
    26             }
    27         }
    28     }
    29     return counter/2;
    30 }
    31 int main()
    32 {
    33     scanf("%d",&t);
    34     while(t--)
    35     {
    36         scanf("%d%d",&n,&m);
    37         for(int i=0;i<n;i++)
    38         {
    39             for(int j=0;j<n;j++)
    40                 matrix[i][j]=0;
    41         }
    42         for(int i=0;i<m;i++)
    43         {
    44             int u,v;
    45             scanf("%d%d",&u,&v);
    46             matrix[u][v]++;
    47             matrix[v][u]++;
    48         }
    49         if(m==0)
    50             printf("0\n");
    51         else
    52         {
    53             int min=0xffffff,temp;
    54             for(int set=1;set<(1<<n);set++)
    55             {
    56                 temp=solve(set);
    57                 if(temp<min)
    58                     min=temp;
    59             }
    60             printf("%d\n",min);
    61         }
    62     }    
    63     return 0;
    64 }

    今天这两题给我的教训就是,想得没办法的时候,看看数据大小,确定能否枚举。枚举也是一种方法!

  • 相关阅读:
    每日一题
    每日一题
    mysql 约束
    七种基础排序算法代码总汇
    netty之bytebuf粘包、分包
    Java nio 简易练手版 模拟用户群聊
    Java网络编程之终端聊天菜鸟版
    双重检测优化与加锁操作redis
    centos部署smb服务
    从事 iOS 研发6年的面经——送给准备跳槽的你!
  • 原文地址:https://www.cnblogs.com/ZShogg/p/2964008.html
Copyright © 2011-2022 走看看