POJ 1419 最大独立集

阅读: 评论:0

POJ 1419 最大独立集

POJ 1419 最大独立集

查了很多资料,看了很多课件..

这种NP难问题.. 确实什么轻易的解法... 长路漫漫。

直接求最大独立集的方法能写了,最大团怎么求呢?

另外吐槽一句:网上很多题解中都有最大独立集=补图的最大团。这没错。

但是,很多都有一句下面是求最大团的代码.. 我去.. 概念清楚了再来写题解好么.. 吐槽完毕.

#include<iostream>
using namespace std;int N,M;
struct Edge
{int v,next;
}E[111111];int ptr[111],ans,Edgenum,set[111],f[111];
int len;void addEdge( int u,int v )
{E[Edgenum].v=v;E[Edgenum].next=ptr[u];ptr[u]=Edgenum++;
}void dfs( int cur ,int num )
{if( cur>N ){if( num>ans ){ans=num;len=0;for( int i=1;i<=N;i++ )if( set[i] )f[len++]=i;}return ;}bool flag=1;for( int i=ptr[cur];i!=-1;i=E[i].next ){if( set[E[i].v] ){flag=0;break;}}if( flag ){set[cur]=1;dfs(cur+1,num+1);set[cur]=0;}if( num+(N-cur)>ans )dfs( cur+1,num );
}int main()
{int T;scanf( "%d",&T );while( T-- ){memset( ptr,-1,sizeof(ptr) );memset( set,0,sizeof(set) );ans=0;Edgenum=0;scanf( "%d %d",&N,&M );for( int i=0;i<M;i++ ){int u,v;scanf( "%d %d",&u,&v );addEdge( u,v );addEdge( v,u );}dfs(1,0);printf( "%dn",ans );printf( "%d",f[0] );for( int i=1;i<len;i++ )printf( " %d",f[i] );printf( "n" );}return 0;
}



本文发布于:2024-02-02 07:58:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170683191842435.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:独立   POJ
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23