FOJ 2141 随机法 求边数至少为原图一半的同构子图 且子图为二分图

2014-11-24 07:16:26 · 作者: · 浏览: 0

题意:

给定n个点 m条无向边的无向图

求一个 至少包含m条边的同构子图 且是二分图

输出二分图的 X点集 和 Y点集

思路:

非正解

我们可以先随机出一组解,再判断这组解是否可行(估测可行解空间较大)


#include
  
   
#include
   
     #include
    
      using namespace std; #define N 105 bool s[N]; int n, m; int Stack[N], top, nowlen; struct node{ int u,v; }edge[10096]; int edgenum; void put(bool hehe){ top = 0; for(int i=1;i<=n;i++)if(s[i] == hehe)Stack[top++] = i; printf(%d,top); if(top)sort(Stack, Stack+top); while(top--)printf( %d,Stack[top]); printf( ); } int main(){ int T, i;scanf(%d,&T); while(T--){ edgenum = nowlen = 0; scanf(%d %d,&n,&m); for(i = 0; i < m; i++) { scanf(%d %d,&edge[edgenum].u,&edge[edgenum].v); edgenum++; } while(nowlen