FOJ 2141(随机子图)
来源:互联网 发布:石器时代linux服务端 编辑:程序博客网 时间:2024/06/06 16:48
题意:给一个n个点,m条无向边,将图的点分成两部分,两部分之间的边数大于等于输出m/2。
解法:随机,居然可以过,不懂是不是正解;将图中的点不断地随机分成两部分直到满足要求,然后输出。
代码:
#include <iostream>#include <stdio.h>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;int n,m;bool graph[110][110];bool points1[110];struct edge{ int u,v;} edges[10087];int main(){ //freopen("in.txt","r",stdin); int t;scanf("%d",&t); while(t--) { memset(graph,0,sizeof graph); scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ scanf("%d%d",&edges[i].u,&edges[i].v); } while(1) { for(int i=1;i<=n;i++){ points1[i]=(rand())&1; } int ans=0; for(int i=0;i<m;i++) if(points1[edges[i].u]^points1[edges[i].v]) { ans++; if(ans>=m/2) break; } if(ans>=m/2) break; } int p1=0,p2=0; for(int i=1;i<=n;i++) if(points1[i])p1++; else p2++; cout<<p1<<" "; for(int i=1;i<=n;i++) if(points1[i])cout<<i<<" ";cout<<'\n'; cout<<p2<<" "; for(int i=1;i<=n;i++) if(!points1[i])cout<<i<<" ";cout<<'\n'; } return 0;}
0 0
- FOJ 2141(随机子图)
- FOJ 2141 随机法 求边数至少为原图一半的同构子图 且子图为二分图
- FOJ 2129 子序列个数
- FOJ 1411 最长配对子串
- foj 犯罪嫌疑人 (脑洞题_)
- FOJ 1018 Maximal Sum(三维子矩最大和)
- 【贪心】 FOJ 2141 Sub-Bipartite Graph
- FOJ 2185 树的路径覆盖 (图)
- FOJ 2136 取糖果(单调栈)
- FOJ 2148(求凸四边形数量)
- FOJ 1001 Duplicate Pair (位图算法)
- foj 2173 (floyd+矩阵快速幂 )
- FOJ--英语考试(最小生成树)
- FOJ 1752 && FOJ 1759 (a^b%c 的不同情况)
- [随机] UOJ#79. 一般图最大(随机)匹配
- 集成学习概述(二)随机子空间 Random subspace method and stacking
- 随机图
- 随机图
- codeforces Playing with Dice
- 小明传奇1
- 搭建常用的三种文件服务器,tomcat apache http nigx
- 编码
- 黑马程序员_Java面向对象1
- FOJ 2141(随机子图)
- cocos2d-x+lua 实现两点触控缩放
- UVALive - 5052 Genome Evolution
- (自己疏忽)找不到具有绑定 WS2007HttpBinding 的终结点的与方案 http 匹配的基址。注册的基址方案是 [https]
- Android DownloadManager 的使用
- 用MATLAB计算平均值和方差mean&&mse
- Linux g++ 关于模板类中嵌套子类的编译问题
- c++之简单的文件输入输出
- A New Game