FOJ 2141 随机法 求边数至少为原图一半的同构子图 且子图为二分图
来源:互联网 发布:32团淘宝兼职 编辑:程序博客网 时间:2024/06/04 17:55
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2141
题意:
给定n个点 m条无向边的无向图
求一个 至少包含m条边的同构子图 且是二分图
输出二分图的 X点集 和 Y点集
思路:
非正解
我们可以先随机出一组解,再判断这组解是否可行(估测可行解空间较大)
#include<stdio.h>#include<algorithm>#include<stdlib.h>using namespace std;#define N 105bool 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("\n"); }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<m/2){nowlen = 0;for(i=1;i<=n;i++)s[i] = (rand())&1;for(i=0;i<edgenum;i++)nowlen+=s[ edge[i].u ] ^ s[edge[i].v ];}put(true);put(false);}return 0;}
0 0
- FOJ 2141 随机法 求边数至少为原图一半的同构子图 且子图为二分图
- FOJ 2141(随机子图)
- 判断一个图是否为二分图且输出结点二分的两个部分(算法导论22.2-6)
- POJ 3294 n个串中至少一半的串共享的最长公共子串
- spoj220 每个字符串至少出现两次且不重叠的最长子串(后缀数组)
- spoj220求至少出现两次且不重叠的最长公共子串
- 后缀数组(每个字符串至少出现两次且不重叠的最长子串)spoj220
- SPOJ PHRASES 每个字符串至少出现两次且不重叠的最长子串
- HDU3926 - Hand in Hand(判断入度最大为2的无向图的同构)
- poj3177&&poj3352 无向图的双连通问题(至少加几条边原图变为双连通图)
- hdu 5329 Question for the Leader 枚举,划分图为k个联通的子图
- matlab subplot 在循环中,为每个子图添加与循环变量有关的title。
- 求能被7整除且至少有一位数字为3的三位数
- POJ3692 最大完全二分子图
- 判断字符串是否为数字且至少包含一位字母
- 判断是否为二分图 染色法
- 判断是否为二分图
- 判断是否为二分图
- JNI调用机制
- x264预设类参数详解
- cocos2dx之CCTableView
- 《C Primer Plus》第一章 概览 课后习题
- git使用入门(1)
- FOJ 2141 随机法 求边数至少为原图一半的同构子图 且子图为二分图
- va_start和va_end使用详解
- 统计学和数据挖掘区别
- 希尔排序
- My English
- wikioi-天梯-普及一等-bfs-1004:四子连棋
- qrand()的用法
- C++ htons(), htonl(), ntohs(), ntohl()详解
- flex自定义组件和自定义事件