传送门

题意:给定n条边,连接编号从1到1e9之间的点,一次操作可以改变一条边连接的一个端点到另一个端点,也就是将第i条边(u,v)变成(u,w),v≠w,问最少次数操作使得这张图的所有边联通,输出操作次数k,以及每次操作的i,v,w。

分析:先将点离散化。假设有n个联通块s1,s2....sn,可以将连通块si内一条边端点改成si+1内一个点,但是改变这条边不能使得原有的连通块内的边变得不连通。dfs这个连通块最后一个被访问的边就是满足要求的边。

代码:

#include <bits/stdc++.h>
#define mp make_pair
#define debug(x) cout << #x << ": " << x << endl
#define pb push_back
typedef long long LL;
const int maxn = 4e5 + 10;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
using namespace std;
typedef pair<int, int> p;
p e[maxn], tail[maxn];
int val[maxn], len = 0, n, t, ord[maxn], vis[maxn], tot = 0, head[maxn], to[maxn], tots;
vector<int> g[maxn];
void dfs(int x, int pre) {vis[x] = true;for (int i = 0; i < g[x].size(); ++i) {int v = to[g[x][i]];if (!vis[v]) {tail[tot] = mp(g[x][i] / 2 + 1, v);dfs(v, x);}}
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> t;while (t--) {cin >> n;len = 0;tot = 0;tots = 0;for (int i = 0; i < n; ++i) {cin >> e[i].first >> e[i].second;val[len++] = e[i].first;val[len++] = e[i].second;}sort(val, val + len);len = unique(val, val + len) - val;for (int i = 0; i < len; ++i) {vis[i] = 0;g[i].clear();}for (int i = 0; i < n; ++i) {int fu = lower_bound(val, val + len, e[i].first) - val;ord[fu] = e[i].first;e[i].first = fu;fu = lower_bound(val, val + len, e[i].second) - val;ord[fu] = e[i].second;e[i].second = fu;to[tots] = e[i].second;g[e[i].first].pb(tots++);to[tots] = e[i].first;g[e[i].second].pb(tots++);}/*for (int i = 0; i < tots; ++i)cout << to[i] << endl;*/for (int i = 0; i < len; ++i) {if (!vis[i]) {++tot;head[tot] = i;dfs(i, -1);}}cout << tot - 1 << "\n";for (int i = 1; i < tot; ++i) {cout << tail[i].first  << " " << ord[tail[i].second] << " " << ord[head[i + 1]] << "\n";}}
}

codeforces 1250N wires(简单图论)相关推荐

  1. CodeForces - 1144F搜索+简单图论

    [题目链接]Graph Without Long Directed Paths [题目分析]题目想要讲一个无向图变成一个最长路径不超过1的有向图.假如某个边是从u到v的,那么所有和v相连的都必须是指向 ...

  2. 图神经网络-简单图论

    简单图论 一.图数据结构 根据根据图中数据的对应关系可分为: ①「无向图」,即 A 关联 B 时,B 同时关联 A.例:微信中当 A 是 B 好友时,B 一定也是 A 的好友(新版本中已支持双向删除好 ...

  3. codeforces Cthulhu 简单图论

    题意:给定一个点集,和边集,问这个它的结构是不是像妖怪. 做法:水,只要DFS判断是否只有一个联通分量,然后再判断N=M即可 #include <iostream> #include &l ...

  4. 【蓝桥杯】交换瓶子(临阵磨枪,不快也光 一看就懂的简单图论)

    题目: 有N个瓶子,编号 1 ~ N,放在架子上.比如有5个瓶子: 2 1 3 5 4要求每次拿起2个瓶子,交换它们的位置. 经过若干次后,使得瓶子的序号为: 1 2 3 4 5对于这么简单的情况,显 ...

  5. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

  6. CodeForces - 1400D Zigzags(简单dp)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,现在要求找到满足条件的四元对 ( i , j , k , l ) 的个数: 1 <= i < j < k < l ...

  7. CodeForces - 1327D Infinite Path(图论综合)

    题目链接:点击查看 题目大意:首先给出一个 1 ~ n 的排列,用 p 数组表示,再给出给个点的颜色,用 c 数组表示 然后抛出Infinite Path的定义:对于某个 i ,p[ i ] , p[ ...

  8. CodeForces - 123B Squares(简单几何+旋转坐标系)

    题目链接:点击查看 题目大意:给出一个无限大的二维坐标平面,现在有一些坏点,规定: 满足以上两条件之一的点即为坏点,现在问最少经过多少个坏点的情况下,可以从起点到达终点 题目分析:一开始没想到坏点是如 ...

  9. [蓝桥杯][2018年第九届真题]小朋友崇拜圈(简单图论)

    题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人? 小朋友编号 ...

最新文章

  1. countif函数比较两列不同_COUNT函数家族的使用(下篇)
  2. 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
  3. html5元素拖动 (转载黑桐)
  4. c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法
  5. Spring的核心模块解析
  6. log4j2到oracle,Log4j2进阶使用(更多高级特性)
  7. Appfuse 教程
  8. 前端页面数据埋点、分析和参考
  9. 提取HTML代码中的网址
  10. Maven的安装与配置教程
  11. 解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”
  12. Linux中CPU亲和性(affinity)
  13. php生成网页快照图片,PHP100精华:PHP生成网页快照_PHP教程
  14. win10电脑连上wifi,后没有网络
  15. layui个人中心html,Layui的简易入门教程
  16. 用超级计算机打游戏是什么样的体验,用超级计算机来玩游戏 GTX Titan显卡评测...
  17. STM32智能门锁之调试步进电机
  18. 都2020年了,你还不知道什么是软文营销吗
  19. Autodesk Inventor Publisher 2013安装破解
  20. 墨尔本大学计算机研究生专业学费,墨尔本大学国际研究生专业学费

热门文章

  1. 如何提高图表设计与制作技巧,看这一文章就够了
  2. (gopher)一无所知学ebpf
  3. ABBYY FineReader Engine 11使用说明
  4. IaaS虽好,切勿忽视SaaS
  5. Maxthon浏览器插件---天涯论坛
  6. 计算机桌面没有cdef,d盘不见了,教您电脑d盘不见了怎么解决
  7. [NLP]如何进行情感分析
  8. [Android应用] 仿QQHD长按好友列表显示操作条
  9. 如何实现数组深拷贝和浅拷贝?
  10. SVT | Street View Text Dataset | Chars74K dataset | 带文本的街景 OCR 数据集