传送门
麻了一道大水题因为我忘了图不一定联通调了 40 分钟...
思路
一棵树的情况很好解决,按照拓扑序(也就是从叶子到根)进行匹配,且每次都最后匹配与父亲的连边(若边数为奇数则不匹配)
变成无向图后,考虑先走出一棵 DFS 树,然后和树的做法一模一样
其实这样的做法就是为了时刻保持原本的联通性
代码
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#define LL long long
#define FOR(i, x, y) for(int i = (x); i <= (y); i++)
#define ROF(i, x, y) for(int i = (x); i >= (y); i--)
#define PFOR(i, x) for(int i = he[x]; i; i = r[i].nxt)
inline int reads()
{
int sign = 1, re = 0; char c = getchar();
while(c < '0' || c > '9'){if(c == '-') sign = -1; c = getchar();}
while('0' <= c && c <= '9'){re = re * 10 + (c - '0'); c = getchar();}
return sign * re;
}
int n, m;
struct Node
{
int to, nxt;
}r[400005]; int he[200005];
inline void Edge_add(int u, int v)
{
static int cnt = 1;
r[++cnt] = (Node){v, he[u]};
he[u] = cnt;
}
int ans, p1[100005], p2[100005], p3[100005];
std::bitset<200005> vis, rvis, used;
int fa[200005];
void dfs(int now)
{
vis[now] = 1;
PFOR(i, now)
{
if(rvis[i >> 1]) continue;
int to = r[i].to;
if(vis[to]) continue;
rvis[i >> 1] = 1;
fa[to] = i, dfs(to);
}
int line = 0;
PFOR(i, now)
{
if(used[i >> 1]) continue;
if((i ^ 1) == fa[now]) continue;
if(!line) line = i;
else
{
p2[++ans] = now, p1[ans] = r[line].to, p3[ans] = r[i].to,
used[line >> 1] = used[i >> 1] = 1;
line = 0;
}
}
if(line && fa[now])
{
p2[++ans] = now, p1[ans] = r[line].to, p3[ans] = r[fa[now] ^ 1].to,
used[line >> 1] = used[fa[now] >> 1] = 1;
line = 0;
}
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#endif
n = reads(), m = reads();
FOR(i, 1, m)
{
int u = reads(), v = reads();
Edge_add(u, v), Edge_add(v, u);
}
FOR(i, 1, n) if(!vis[i]) dfs(i);
printf("%d\n", ans);
FOR(i, 1, ans) printf("%d %d %d\n", p1[i], p2[i], p3[i]);
return 0;
}
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效