Bigraph Extension

题意:

有2n个点,n为偶数,n个点属于集合A,n个点属于集合B。起初在途中有m个无向边,边的两侧端点分别在两个集合里,任何两个边都没有公共交点。
现在你可以执行任意次操作:
在集合A,B中分别选一个点,这两个点没有直接的边相连,现在给这两个点相连

在操作之后,对于集合A中任意一个点,集合B中任意一个点,需要满足:
这两个点是联通的
这两个点的最长简单路径是严格大于n的
问最少的加边数量,并按照最小字典序输出连边方案

题解:

构造题,不过这个题的结论其实好猜,具体证明就麻烦些
其实就是将2n个点构造成环,现在已经有了m个点,最小加边数就是2n-m
我们先不考虑环,先考虑将所有点连通
然后就是考虑字典序的最小限制,那我们就从小到达枚举集合A中的点,再从小到大枚举B中的点,通过维护并查集和度数数组来判断两个点是否连成链。这样就保证前2n-m-1条边的字典序最小。现在所有点已经联通了,不过还缺一个边,我们需要再加入一个边形成环,我们遍历A,B中度数为1的点连起来,放在第2n-m条边的位置
官方题解的详细证明:

代码:

#pragma GCC diagnostic error "-std=c++11"
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <unordered_map>
#define iss ios::sync_with_stdio(false)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
const int mod = 1e9 + 7;
const int MAXN = 2e5 + 5;
const int inf = 0x3f3f3f3f;
int fa[MAXN];
int in[MAXN];
vector<pii> ans;
priority_queue<int, vector<int>, greater<int>> q;//最小堆
void init(int n)
{for (int i = 1; i <= 2 * n; i++) {fa[i] = i;in[i] = 0;}
}
int find(int x)
{if (fa[x] == x)return x;elsereturn fa[x] = find(fa[x]);
}
void combine(int u, int v)
{u = find(u);v = find(v);fa[u] = v;
}
int main()
{int t;scanf("%d", &t);while (t--) {ans.clear();int n, m;scanf("%d%d", &n, &m);init(n);for (int i = 1; i <= m; i++) {int u, v;scanf("%d%d", &u, &v);v += n;combine(u, v);in[u]++;in[v]++;}for (int i = n + 1; i <= 2 * n; i++)q.push(i);for (int i = 1; i <= n; i++) {queue<int> st;while (in[i] < 2 && !q.empty()) {int j = q.top();q.pop();if (find(j) != find(i)) {combine(i, j);in[i]++;in[j]++;ans.push_back({ i, j });}st.push(j);}while (!st.empty()) {int j = st.front();st.pop();if (in[j] < 2)q.push(j);}}int flag = 0, p1 = 0, p2 = 0;for (int i = 1; i <= n; i++) {if (in[i] == 1){p1 = i;break;}}for (int i = n + 1; i <= 2 * n; i++) {if (in[i] == 1){p2 = i;break;}}if(p1!=0&&p2!=0) {ans.push_back({ p1, p2 });
//          printf("组成环:p1=%d,p2=%d\n",p1,p2-n); }if (flag) {printf("-1\n");} else {printf("%d\n", ans.size());for (auto i : ans) {printf("%d %d\n", i.first, i.second - n);}}while (!q.empty())q.pop();}
}

Bigraph Extension相关推荐

  1. 2021中国大学生程序设计竞赛部分题解(CCPC)- 网络选拔赛(重赛)

    文章目录 一.1002 Kanade Doesn't Want to Learn CG 二.1004 Primality Test 三.1005 Monopoly 四.1006 Nun Heh Heh ...

  2. TVM apps extension示例扩展库

    TVM apps extension示例扩展库 此文件夹包含TVM的示例扩展库.演示了其它库如何在C++和Python API中扩展TVM. 该库扩展了TVM的功能. python模块加载新的共享库, ...

  3. ios share extension 真机不显示_ios企业签名:APPGroups实现App之间数据共享

    一.认识App Groups AppGroup allows data sharing between two different apps or even app and widgets by cr ...

  4. php解决 mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysq

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. The mysql extension is deprecated and will be removed i ...

  5. 解决 The mysql extension is deprecated and will be r

    为什么80%的码农都做不了架构师?>>>    解决 The mysql extension is deprecated and will be removed in the fut ...

  6. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...

    [Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...

  7. Chrome Extension 检查视图(无效)处理方法

    最近闲来无事,简单看了下Chrome扩展的开发,并且开发一个小小的翻译插件(TranslateBao)作为练手,开发细节不详述了,如果有新学习chrome extension开发的新人,可以参考源码, ...

  8. running build_ext building ‘gensim.models.word2vec_inner‘ extension error: Microsoft Visua

    running build_ext     building 'gensim.models.word2vec_inner' extension     error: Microsoft Visual ...

  9. struts2 no extension(excludePattern)

    采用struts2 小伙伴非常希望更改或删除action扩展,本文将帮助你实现 struts2-core-2.3.16.jar , 下载链接: http://repo1.maven.org/maven ...

最新文章

  1. 专家:教育等领域将成为人工智能“用武之地”
  2. Sqoop(四)增量导入、全量导入、减量导入
  3. hdu 2586(LCA的离线做法)
  4. redis的bigkeys命令之原理
  5. [学习笔记]标记永久化
  6. JAVA大数--POJ 1715 大菲波数
  7. 不常提及但使用有效的HTML技巧
  8. TensorFlow 教程 --教程--2.4MNIST 进阶
  9. include引用php,php使用include 和require引入文件的区别
  10. EasyUI的-表格设置
  11. Macaron的注入struct
  12. 关于Dijkstra三种堆速度的研究
  13. DNA和纳米(Nano)Fusion技术的发展趋势
  14. param.requires_grad = False
  15. python数据库教程_python使用mysql操作教程
  16. html网页设计优秀作品和代码,优秀的网页设计作品(一)
  17. ios 边录音边放_iOS 录音、音频的拼接剪切以及边录边压缩转码
  18. android systrace log,Android优化之Systrace
  19. BootStrap4 文本颜色和背景颜色
  20. mysql综训实训报告总结_实训报告总结收获.doc

热门文章

  1. 最不像地球的45个地方,你见过几个?
  2. 神奇的折纸艺术!无限翻转完全停不下来
  3. 人生没有对与错,只是选择不同
  4. 知乎上这个程序员火了,竟是因为给老板修了一 次U盘
  5. 苍天饶过谁?| 今日最佳
  6. 大数据时代,如何才能提高自身竞争力?
  7. vue 带全选和多选的表格怎么写_EXCEL五分钟,批量制作带照片的工地出入证
  8. oracle 参照完整性,Oracle中用表外键来保证系统参照完整性
  9. SimpleXMLRPC_python xmlrpclib SimpleXMLRPCServer 模块
  10. android 监听布局改变,Android通过监听最外层布局的改变监听键盘的状态,软键盘的弹出和收起都会改变外层布局(前提是把Activity的mode设置成压缩);...