codeforces 1250N wires(简单图论)
传送门
题意:给定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(简单图论)相关推荐
- CodeForces - 1144F搜索+简单图论
[题目链接]Graph Without Long Directed Paths [题目分析]题目想要讲一个无向图变成一个最长路径不超过1的有向图.假如某个边是从u到v的,那么所有和v相连的都必须是指向 ...
- 图神经网络-简单图论
简单图论 一.图数据结构 根据根据图中数据的对应关系可分为: ①「无向图」,即 A 关联 B 时,B 同时关联 A.例:微信中当 A 是 B 好友时,B 一定也是 A 的好友(新版本中已支持双向删除好 ...
- codeforces Cthulhu 简单图论
题意:给定一个点集,和边集,问这个它的结构是不是像妖怪. 做法:水,只要DFS判断是否只有一个联通分量,然后再判断N=M即可 #include <iostream> #include &l ...
- 【蓝桥杯】交换瓶子(临阵磨枪,不快也光 一看就懂的简单图论)
题目: 有N个瓶子,编号 1 ~ N,放在架子上.比如有5个瓶子: 2 1 3 5 4要求每次拿起2个瓶子,交换它们的位置. 经过若干次后,使得瓶子的序号为: 1 2 3 4 5对于这么简单的情况,显 ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
- CodeForces - 1400D Zigzags(简单dp)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,现在要求找到满足条件的四元对 ( i , j , k , l ) 的个数: 1 <= i < j < k < l ...
- CodeForces - 1327D Infinite Path(图论综合)
题目链接:点击查看 题目大意:首先给出一个 1 ~ n 的排列,用 p 数组表示,再给出给个点的颜色,用 c 数组表示 然后抛出Infinite Path的定义:对于某个 i ,p[ i ] , p[ ...
- CodeForces - 123B Squares(简单几何+旋转坐标系)
题目链接:点击查看 题目大意:给出一个无限大的二维坐标平面,现在有一些坏点,规定: 满足以上两条件之一的点即为坏点,现在问最少经过多少个坏点的情况下,可以从起点到达终点 题目分析:一开始没想到坏点是如 ...
- [蓝桥杯][2018年第九届真题]小朋友崇拜圈(简单图论)
题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人? 小朋友编号 ...
最新文章
- countif函数比较两列不同_COUNT函数家族的使用(下篇)
- 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
- html5元素拖动 (转载黑桐)
- c#屏幕录制(经典)(含源码和AForge.Video.FFMPEG.DLL)及填坑办法
- Spring的核心模块解析
- log4j2到oracle,Log4j2进阶使用(更多高级特性)
- Appfuse 教程
- 前端页面数据埋点、分析和参考
- 提取HTML代码中的网址
- Maven的安装与配置教程
- 解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”
- Linux中CPU亲和性(affinity)
- php生成网页快照图片,PHP100精华:PHP生成网页快照_PHP教程
- win10电脑连上wifi,后没有网络
- layui个人中心html,Layui的简易入门教程
- 用超级计算机打游戏是什么样的体验,用超级计算机来玩游戏 GTX Titan显卡评测...
- STM32智能门锁之调试步进电机
- 都2020年了,你还不知道什么是软文营销吗
- Autodesk Inventor Publisher 2013安装破解
- 墨尔本大学计算机研究生专业学费,墨尔本大学国际研究生专业学费
热门文章
- 如何提高图表设计与制作技巧,看这一文章就够了
- (gopher)一无所知学ebpf
- ABBYY FineReader Engine 11使用说明
- IaaS虽好,切勿忽视SaaS
- Maxthon浏览器插件---天涯论坛
- 计算机桌面没有cdef,d盘不见了,教您电脑d盘不见了怎么解决
- [NLP]如何进行情感分析
- [Android应用] 仿QQHD长按好友列表显示操作条
- 如何实现数组深拷贝和浅拷贝?
- SVT | Street View Text Dataset | Chars74K dataset | 带文本的街景 OCR 数据集