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 }

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

 

转载于:https://www.cnblogs.com/ZShogg/archive/2013/03/16/2964008.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值