hdu 1419 最大独立集

说实话,真心觉得这个实在是一个模拟的题目一般,但是知识点却是图论当中的独立集。。。掌握知识点不牢固啊。。

题意就是一个配色方案,对于一条边而言,两端的顶点颜色不能够相同,尽可能的将颜色染为黑色。。求配色方案当中的黑色最多为多少,输出一个最佳配色方案中的黑色节点。。

View Code
 1   #include<iostream>
 2   #include<stdio.h>
 3   using namespace std;
 4   struct node
 5   {
 6       int end,next;       
 7   }edge[10002];
 8   int head[102],n,m,start,end,maxval,color[102];
 9   int answer[102];
10   void dfs(int i,int j)
11   {
12       if(i>=n)
13       {
14           if(j>maxval)
15           {
16               maxval=j;
17               for(int i=1;i<=n;i++)answer[i]=color[i];
18           }    
19           return ;
20       }
21       color[i]=-1;
22       int end;
23       for(end=head[i];end!=-1;end=edge[end].next)
24       {
25           if(color[edge[end].end]==-1)
26           break;
27       }
28       if(end==-1)dfs(i+1,j+1);
29       
30        color[i]=1;
31        dfs(i+1,j);
32        color[i]=0;
33       
34   }
35   int main()
36   {
37      int t;
38      scanf("%d",&t);
39      while(t--)
40      {
41              scanf("%d%d",&n,&m);
42              for(int i=1;i<=n;i++)head[i]=-1;
43              for(int i=0,Count=0;i<m;i++)
44              {
45                  scanf("%d%d",&start,&end);
46                  edge[Count].end=end;
47                  edge[Count].next=head[start];
48                  head[start]=Count++;
49                  edge[Count].end=start;
50                  edge[Count].next=head[end];
51                  head[end]=Count++;
52              }
53              maxval=0;
54              dfs(1,0);
55              printf("%d\n",maxval);
56              for(int i=1;i<=n;i++)if(answer[i]==-1)printf("%d ",i);
57              printf("\n");
58      }
59      return 0;    
60   } 
61   
62   

 

转载于:https://www.cnblogs.com/nuoyan2010/archive/2012/09/01/2667120.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值